大家好,如果您使用的是Spring Boot,并且遇到诸如“无法为数据库类型NONE确定嵌入式数据库驱动程序类”或“在类路径资源ataSourceAutoConfiguration中定义的名称为'dataSource'的bean创建错误”之类的错误,那么您来对地方了地点。 在本文中,我们将研究导致Spring Boot错误发生的不同情况,以及如何解决这些问题。 此错误的普遍原因是Spring Boot的自动配置 ,它正在尝试为您自动配置DataSource
,但没有足够的信息。 它会自动尝试创建DataSourceAutoConfiguration
bean的实例,并且失败了。
像其他Spring框架错误一样,堆栈跟踪看起来也很凌乱,使用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错误
即使他们不需要数据库,我的一些朋友和读者也会遇到此错误。 他们收到此错误的主要原因是由于对启动程序的依赖,例如其中一些包含spring-boot-starter-data-jpa
,然后包含hibernate-entitymanager.jar
并且它们不需要设置其他内容。
有时包括不正确的Starter POM也可以解决此问题,例如添加spring-boot-starter-jdbc
而不是spring-boot-starter-data-jpa
依赖项。
如果您知道,Spring Boot自动配置是由类路径中存在的JAR依赖项触发的,并且如果它拉出了您不需要的内容,则可能会出现这种类型的错误。
2)由于缺少依赖性
有时您确实需要数据库,但是却忘记了包含
将驱动程序JAR文件放入类路径,这也可能导致此错误。 例如,您已在application.properties
,spring boots配置文件中指定了以下属性,但未在类路径中包含相应的MySQL JDBC驱动程序
spring.datasource.url = jdbc:mysql://localhost/test
spring.datasource.driver-class-name= com.mysql.jdbc.Driver
为了解决此错误,您需要包括正确的Starter POM依赖项,或者将MySQL JDBC JAR文件手动添加到类路径中。 如果您有兴趣,可以参阅本教程,以了解有关如何在本教程中使用MySQL数据库将Java应用程序连接到数据库的更多信息。
3)由于缺少Application.properties中的配置
Spring Boot擅长配置内存数据库,例如H2,HSQLDB,Derby等,并且只需将其JAR文件添加到
但对于其他类 ,您需要为Spring Boot提供其他详细信息,例如URL,DriverClass名称等。
您可以通过将一些属性添加到具有spring.datasource
前缀的application.properties文件中来实现,如以下示例所示:
spring.datasource.url = jdbc:mysql://localhost/abc
spring.datasource.name=testme
4)排除DataSourceAutoConfiguration
有时排除DataSourceAutoConfigution
也可以解决此问题,尤其是在不需要数据库的情况下。 这将防止Spring Boot自动配置数据库,并且不会出现任何错误。 您可以使用Spring Boot的@EnableAutoConfiguration批注的exclude属性来禁用某些类的自动配置,如下所示:
@Configuration @EnableAutoConfiguration (exclude={DataSourceAutoConfiguration. class }) public class SpringBootDemo { public static void main(String[] args) { SpringApplication.runSpringBootDemo. class , args); } }
您甚至可以使用带有
@EnableAutoConfiguration如下所示:
@Configuration @EnableAutoConfiguration ( exclude = {DataSourceAutoConfiguration. , HibernateJpaAutoConfiguration. class , HibernateJpaAutoConfiguration. class }) public class SpringBootDemo { public static void main(String[] args) { SpringApplication.runSpringBootDemo. class , args); } }
这就是如何解决“无法为数据库类型NONE确定嵌入式数据库驱动程序类”或“在类路径资源DataSourceAutoConfiguration中定义名称为'dataSource'的bean创建错误”的问题。 在大多数情况下,这是因为自动配置没有足够的详细信息来配置数据库,但是有时这也是数据库自动配置的偶然触发,可以使用@EnableAutoConfiguration
批注的exclude属性来禁用它。
顺便说一句,如果您想深入学习Spring Boot,请参考以下有用的资源:
翻译自: https://www.javacodegeeks.com/2019/05/error-creating-bean-datasource-datasourceautoconfiguration.html