Статьи

Spring Boot Error — Ошибка создания компонента с именем «dataSource», определенным в ресурсе пути к классу DataSourceAutoConfiguration

Здравствуйте, ребята, если вы используете Spring Boot и получаете ошибки типа «Не удается определить класс встроенного драйвера базы данных для типа базы данных NONE» или «Ошибка при создании bean-компонента с именем« dataSource », определенным в ресурсе пути к классу ataSourceAutoConfiguration», то вы попали вправо место. В этой статье мы рассмотрим различные сценарии возникновения ошибки Spring Boot и способы их устранения. Основной причиной этой ошибки является автоконфигурация Spring Boot, которая пытается автоматически настроить источник данных для вас, но не имеет достаточно информации. Он автоматически пытается создать экземпляр bean-компонента DataSourceAutoConfiguration и он не работает.

Как и другие ошибки Spring Framework, трассировка стека выглядит довольно грязно, что они могли бы улучшить с помощью Spring Boot, но суть в том, что эти две ошибки, которые я упомянул выше.

Давайте посмотрим, как выглядит трассировка стека в целом:

org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE . If you want an embedded database please put a supported one on the classpath.:

[INFO] org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.

1) Ошибка весенней загрузки из-за зависимости стартера

Некоторые из моих друзей и читателей получили эту ошибку, даже если им не нужна база данных. Основная причина, по которой они получили эту ошибку, заключалась в том, что они зависели от стартера, например, некоторые из них включали spring-boot-starter-data-jpa который затем включал hibernate-entitymanager.jar и у них не было дополнительных вещей, которые нужно было бы настроить.

Иногда включение неправильного Starter POM также может решить эту проблему, например, добавление spring-boot-starter-jdbc вместо зависимости spring-boot-starter-data-jpa .

Если вы знаете, автоконфигурация Spring Boot запускается зависимостями JAR, присутствующими в пути к классам, и если он извлекает что-то, что вам не нужно, то может появиться этот тип ошибки.

Spring Boot Error

2) Из-за отсутствия зависимости

Иногда вам нужна база данных, но вы забыли включить
JAR-файл драйвера в classpath, который также может вызвать эту ошибку. Например, вы указали следующие свойства в файле application.properties , весеннем загрузочном конфигурационном файле, но не включили соответствующий драйвер MySQL JDBC в classpath

spring.datasource.url = jdbc:mysql://localhost/test

spring.datasource.driver-class-name= com.mysql.jdbc.Driver

Чтобы устранить эту ошибку, необходимо либо включить правильную зависимость POM Starter, либо вручную добавить JAR-файл MySQL JDBC в путь к классам. Если вам интересно, вы можете посмотреть этот учебник, чтобы узнать больше о том, как подключить приложение Java к базе данных с помощью базы данных MySQL в этом учебнике.

3) Из-за отсутствия конфигурации в Application.properties

Spring Boot хорош в настройке баз данных в памяти, таких как H2, HSQLDB, Derby и т. Д., И может настраивать их, просто добавляя их файлы JAR в
classpath, но для других вам нужно предоставить Spring Boot дополнительную информацию, такую ​​как URL, имя DriverClass и т. д.

Это можно сделать, добавив некоторые свойства в файл application.properties с префиксом spring.datasource , как показано в следующем примере:

spring.datasource.url = jdbc:mysql://localhost/abc

spring.datasource.name=testme

spring.datasource.username=xxxx

spring.datasource.password=xxxx

spring.datasource.driver-class-name= com.mysql.jdbc.Driver spring.jpa.database=mysql

spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect

Spring Boot Error

4) Исключить DataSourceAutoConfiguration

Иногда исключение DataSourceAutoConfigution также может решить эту проблему, особенно если вам не нужна база данных. Это предотвратит автоматическое конфигурирование базы данных Spring Boot, и ошибки не будет. Вы можете отключить автоматическую настройку для определенных классов, используя атрибут exclude аннотации @EnableAutoConfiguration Spring Boot, как показано ниже:

1
2
3
4
5
6
7
8
9
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class SpringBootDemo {
  
  public static void main(String[] args) {
   SpringApplication.runSpringBootDemo.class, args);
  }
  
}

Вы даже можете исключить более одного класса, используя атрибут exclude с
@EnableAutoConfiguration, как показано ниже:

01
02
03
04
05
06
07
08
09
10
@Configuration
@EnableAutoConfiguration(
exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class SpringBootDemo {
  
  public static void main(String[] args) {
     SpringApplication.runSpringBootDemo.class, args);
  }
  
}

Это все о том, как решить проблему «Не удается определить класс встроенного драйвера базы данных для типа базы данных NONE» или «Ошибка создания компонента с именем« dataSource », определенным в ресурсе пути к классу DataSourceAutoConfiguration» . В большинстве случаев это происходит из-за того, что автоконфигурация не имеет достаточно деталей, необходимых для настройки базы данных, но иногда это также случайный триггер автоконфигурирования базы данных, который можно отключить с помощью атрибута @EnableAutoConfiguration аннотации @EnableAutoConfiguration .

Кстати, если вы хотите подробно изучить Spring Boot, вот несколько полезных ресурсов для вашего обучения:

См. Оригинальную статью здесь: Spring Boot Error — Ошибка при создании bean-компонента с именем «dataSource», определенным в ресурсе пути к классу DataSourceAutoConfiguration

Мнения, высказанные участниками Java Code Geeks, являются их собственными.