1. Обзор
В этом коротком учебнике мы обсудим что вызывает и что решает Ошибка “Не удалось настроить DataSource” о проекте «Весенняя загрузка».
Мы решим проблему с помощью двух разных подходов:
- Определение источника данных
- Отключение автоматической конфигурации источника данных
2. Проблема
Теперь предположим, что у нас есть проект Spring Boot, и мы добавили весна-данные-стартер-jpa зависимость и Водитель MyS’L JDBC к нашему пом.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 от нашего classpath, Spring Boot пытается автоматически настроить систему JPA ДанныеИсточник . Проблема в том, мы не дали Spring информацию, необходимой для выполнения автоматической конфигурации .
Например, мы не определили свойства соединения JDBC, и нам нужно будет сделать это при работе с внешними базами данных, такими как MyS’L и MSS’L. С другой стороны, мы не будем сталкиваться с этой проблемой с базами данных памяти, как H2, поскольку они могут создать источник данных без всей этой информации.
4. Решения
4.1. Определить DataSource с использованием свойств
Поскольку проблема возникает из-за отсутствия подключения к базе данных, мы можем решить проблему, просто предоставив свойства источника данных.
Во-первых, давайте определим свойства источника данных в файле 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-адрес базы данных, имя пользователя, пароль и информацию о драйвере S’L:
@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 .
Классная DataSourceAutoКонфигурация является базовым классом для настройки источника данных с помощью spring.datasource.» свойства.
Теперь, Есть несколько способов, которые мы можем исключить это из автоматической конфигурации .
Во-первых, мы отключить автоматическую конфигурацию с помощью spring.autoconfigure.exclude имущественные в нашем application.properts файл:
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})
Во всех вышеперечисленных примерах мы отключил автоматическую конфигурацию ДанныеИсточник . И это не повлияет на автоматическую настройку любых других бобов.
Таким образом, подводя итог, мы можем использовать любой из вышеперечисленных методов, чтобы отключить автоматическую конфигурацию источника данных Spring Boot.
В идеале мы должны предоставлять информацию об источниках данных и использовать опцию исключения только для тестирования.
5. Заключение
В этой статье мы видели, что вызывает “Не удалось настроить DataSource” ошибка. Во-первых, мы исправили проблему, определив источник данных. Далее мы обсудили, как обойти проблему без настройки источника данных вообще.
Как всегда, полный код, используемый в этой статье, доступен GitHub .