פתרון השגיאה "נכשל בתצורת מקור נתונים"

1. סקירה כללית

במדריך קצר זה נדון מה גורם ומה פותר את שגיאת "נכשלה בתצורת שגיאת DataSource" על פרויקט Spring Boot.

נפתור את הבעיה בשתי גישות שונות:

  1. הגדרת מקור הנתונים
  2. השבתת התצורה האוטומטית של מקור הנתונים

2. הבעיה

עכשיו, נניח שיש לנו פרויקט Spring Boot, והוספנו את ה- spring-data-starter-jpa תלות ומנהל MyDQL JDBC שלנו pom.xml:

 org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java runtime 

אך כאשר אנו מריצים את היישום, הוא נכשל עם השגיאה:

תיאור: נכשלה תצורת מאפיין DataSource: התכונה 'url' לא צוינה ולא ניתן היה להגדיר שום מקור נתונים מוטבע. סיבה: נכשל בקביעת מחלקת נהגים מתאימה

בואו נראה למה זה קורה.

3. הסיבה

לפי התכנון, תצורה אוטומטית של Spring Boot מנסה להגדיר את השעועית באופן אוטומטי על סמך התלות שנוספה לשביל הכיתה.

ומכיוון שיש לנו את התלות ב- JPA בנתיב הכיתה שלנו, Spring Boot מנסה להגדיר באופן אוטומטי JPA מקור מידע. הבעיה היא, לא נתנו לאביב את המידע הדרוש כדי לבצע את התצורה האוטומטית.

לדוגמה, לא הגדרנו מאפייני חיבור JDBC, ונצטרך לעשות זאת כאשר אנו עובדים עם מסדי נתונים חיצוניים כמו MySQL ו- MSSQL. מצד שני, לא נתמודד עם בעיה זו עם מאגרי מידע בזיכרון כמו H2 מכיוון שהם יכולים ליצור מקור נתונים ללא כל המידע הזה.

4. פתרונות

4.1. תגדיר את מקור מידע שימוש במאפיינים

מכיוון שהבעיה מתרחשת עקב חיבור מסד הנתונים החסר, אנו יכולים לפתור את הבעיה פשוט על ידי מתן מאפייני מקור הנתונים.

ראשית, בואו הגדר את מאפייני מקור הנתונים ב- application.properties קוֹבֶץ של הפרויקט שלנו:

spring.datasource.url = jdbc: mysql: // localhost: 3306 / myDb spring.datasource.username = user1 spring.datasource.password = לעבור spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver

או, אנחנו יכולים ספק את מאפייני מקור הנתונים ב- application.yml:

קפיץ: מקור נתונים: driverClassName: com.mysql.cj.jdbc. url דרייבר: jdbc: mysql: // localhost: 3306 / myDb שם משתמש: user1 סיסמה: לעבור

4.2. תגדיר את מקור מידע מבחינה תכנותית

לחלופין, אנו יכולים להגדיר את מקור הנתונים שלנו באופן פרוגרמטי, לפי באמצעות הכיתה בונה כלי עזר DataSourceBuilder. עלינו לספק את כתובת האתר, שם המשתמש, הסיסמה ומידע מנהל ההתקן של SQL בכדי ליצור את מקור הנתונים שלנו:

@Configuration מחלקה ציבורית DatasourceConfig {@Bean DataSource source source () {return DataSourceBuilder.create () .driverClassName ("com.mysql.cj.jdbc.Driver") .url ("jdbc: mysql: // localhost: 3306 / myDb "). username (" user1 "). סיסמה (" pass ") .build (); }}

בקיצור, אנו יכולים לבחור להשתמש באחת מהאפשרויות שלעיל כדי להגדיר מקור נתונים בהתאם לדרישותינו.

4.3. אל תכלול DataSourceAutoConfiguration

בחלק הקודם תיקנו את הבעיה על ידי הוספת מאפייני מקור הנתונים לפרויקט שלנו. אך כיצד נפתור זאת אם איננו מוכנים עדיין להגדיר את מקור הנתונים שלנו?

בואו נראה איך למנוע מאתחול האביב להגדיר אוטומטית את מקור הנתונים.

הכיתה DataSourceAutoConfiguration הוא מחלקת הבסיס לתצורה של מקור נתונים באמצעות ה- spring.datasource. * נכסים.

כעת, ישנן מספר דרכים בהן אנו יכולים להוציא זאת מהתצורה האוטומטית.

ראשית, אנחנו יכולים השבת את התצורה האוטומטית באמצעות spring.autoconfigure.excludeתכונה בשלנו application.properties קוֹבֶץ:

spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

כמו כן, אנו יכולים לעשות את אותו הדבר באמצעות שלנו application.yml קוֹבֶץ:

קפיץ: תצורה אוטומטית: לא לכלול: - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

או, אנחנו יכולים להשתמש ב לא לכלול תכונה על שלנו @ SpringBootApplication אוֹ @EnableAutoConfiguration ביאור:

@SpringBootApplication (exclude = {DataSourceAutoConfiguration.class})

בכל הדוגמאות לעיל אנו השבת את התצורה האוטומטית של ה- מקור מידע. וזה לא ישפיע על התצורה האוטומטית של שעועית אחרת.

לכן, לסיכום, אנו יכולים להשתמש בכל אחת מהשיטות לעיל כדי להשבית את התצורה האוטומטית של Spring Boot של מקור הנתונים.

באופן אידיאלי, עלינו לספק את פרטי מקור הנתונים ולהשתמש באפשרות הכללה רק לבדיקה.

5. מסקנה

במאמר זה ראינו מה גורם ל "הגדרת התצורה של מקור נתונים נכשלה" שְׁגִיאָה. ראשית, תיקנו את הבעיה על ידי הגדרת מקור הנתונים. לאחר מכן, דנו כיצד לעקוף את הבעיה מבלי להגדיר כלל את מקור הנתונים.

כמו תמיד, הקוד המלא המשמש במאמר זה זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found