Разрешаване на грешка „Неуспешно конфигуриране на източник на данни“

1. Общ преглед

В този кратък урок ще обсъдим причините и какво разрешава грешката „Неуспешно конфигуриране на източник на данни“ в проект за пролетно зареждане.

Ще разрешим проблема, като използваме два различни подхода:

  1. Определяне на източника на данни
  2. Деактивиране на автоматичното конфигуриране на източника на данни

2. Проблемът

Сега, да предположим, че имаме проект Spring Boot и сме добавили зависимостта spring-data-starter-jpa и драйвер MySQL JDBC към нашия pom.xml :

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

Но когато стартираме приложението, то се проваля с грешката:

Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class

Нека да видим защо това се случва.

3. Причината

По дизайн, автоматичното конфигуриране на Spring Boot се опитва да конфигурира автоматично компонентите на базата на зависимостите, добавени към пътя на класа.

И тъй като имаме JPA зависимост от нашия път на класа, Spring Boot се опитва автоматично да конфигурира JPA DataSource . Проблемът е, че не сме дали на Spring необходимата информация за извършване на автоматичната конфигурация .

Например не сме дефинирали никакви свойства на JDBC връзка и ще трябва да го направим, когато работим с външни бази данни като MySQL и MSSQL. От друга страна, няма да срещнем този проблем с бази данни в паметта като H2, тъй като те могат да създадат източник на данни без цялата тази информация.

4. Решения

4.1. Дефинирайте източника на данни с помощта на свойства

Тъй като проблемът възниква поради липсващата връзка с база данни, можем да разрешим проблема просто като предоставим свойствата на източника на данни.

Първо, нека дефинираме свойствата на източника на данни във файла application.properties на нашия проект:

spring.datasource.url=jdbc:mysql://localhost:3306/myDb spring.datasource.username=user1 spring.datasource.password=pass spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

Или можем да предоставим свойства на източника на данни в application.yml :

spring: datasource: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/myDb username: user1 password: pass

4.2. Дефинирайте DataSource програмно

Като алтернатива можем да дефинираме нашия източник на данни програмно, като използваме класа на конструктора на помощни програми DataSourceBuilder . Трябва да предоставим URL на базата данни, потребителско име, парола и информация за драйвера на SQL, за да създадем нашия източник на данни:

@Configuration public class DatasourceConfig { @Bean public DataSource datasource() { return DataSourceBuilder.create() .driverClassName("com.mysql.cj.jdbc.Driver") .url("jdbc:mysql://localhost:3306/myDb") .username("user1") .password("pass") .build(); } }

Накратко, можем да изберем да използваме някоя от горните опции за конфигуриране на източник на данни според нашите изисквания.

4.3. Изключете DataSourceAutoConfiguration

В предишния раздел отстранихме проблема, като добавихме свойствата на източника на данни към нашия проект. Но как да решим това, ако все още не сме готови да дефинираме източника си на данни?

Нека видим как да предотвратим автоматичното конфигуриране на Spring Boot от източника на данни .

Класът DataSourceAutoConfiguration е основният клас за конфигуриране на източник на данни с помощта на свойствата spring.datasource. * .

Сега има няколко начина, по които можем да изключим това от автоматичното конфигуриране.

Първо, можем да деактивираме автоматичното конфигуриране, като използваме свойството spring.autoconfigure.exclude в нашия файл application.properties :

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

По същия начин можем да направим същото, като използваме нашия файл application.yml :

spring: autoconfigure: exclude: - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Или можем да използваме атрибута изключване в нашата @SpringBootApplication или @EnableAutoConfiguration анотация :

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

Във всички горни примери деактивирахме автоматичното конфигуриране на DataSource . И това няма да повлияе на автоматичното конфигуриране на други зърна.

Така че, за да обобщим, можем да използваме някой от горните методи, за да деактивираме автоматичното конфигуриране на Spring Boot на източника на данни.

В идеалния случай трябва да предоставим информация за източника на данни и да използваме опцията за изключване само за тестване.

5. Заключение

В тази статия видяхме какво причинява грешката „Неуспешно конфигуриране на източник на данни“ . Първо, отстранихме проблема, като дефинирахме източника на данни. След това обсъдихме как да заобиколим проблема, без изобщо да конфигурираме източника на данни.

Както винаги, пълният код, използван в тази статия, е достъпен на GitHub.