Spring Boot - 无法确定数据库类型 NONE 的嵌入式数据库驱动程序类
Posted
技术标签:
【中文标题】Spring Boot - 无法确定数据库类型 NONE 的嵌入式数据库驱动程序类【英文标题】:Spring Boot - Cannot determine embedded database driver class for database type NONE 【发布时间】:2014-07-27 07:20:28 【问题描述】:这是尝试运行我的网络应用程序时引发的错误:
[INFO] WARNING: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; nested exception is 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.
[INFO] at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.getDriverClassName(DataSourceProperties.java:91)
[INFO] at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource(DataSourceAutoConfiguration.java:100)
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[INFO] at java.lang.reflect.Method.invoke(Method.java:606)
[INFO] at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
[INFO] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)
[INFO] at org.springframework.beans.factory.support.ConstructorResolver$3.run(ConstructorResolver.java:580)
[INFO] at java.security.AccessController.doPrivileged(Native Method)
[INFO] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:577)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
[INFO] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
[INFO] at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017)
[INFO] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960)
[INFO] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858)
[INFO] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
[INFO] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
[INFO] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
[INFO] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
[INFO] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:370)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
[INFO] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
[INFO] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
[INFO] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750)
[INFO] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
[INFO] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:683)
[INFO] at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
[INFO] at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:142)
[INFO] at org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener.initWebApplicationContext(SpringBootContextLoaderListener.java:60)
[INFO] at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
[INFO] at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
[INFO] at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
[INFO] at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
[INFO] at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
[INFO] at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
[INFO] at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
[INFO] at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
[INFO] at org.mortbay.jetty.Server.doStart(Server.java:224)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
[INFO] at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:249)
[INFO] at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:306)
[INFO] at com.google.appengine.tools.development.AutomaticInstanceHolder.startUp(AutomaticInstanceHolder.java:26)
[INFO] at com.google.appengine.tools.development.AbstractModule.startup(AbstractModule.java:79)
[INFO] at com.google.appengine.tools.development.Modules.startup(Modules.java:88)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl.doStart(DevAppServerImpl.java:254)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl.access$000(DevAppServerImpl.java:47)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:212)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:210)
[INFO] at java.security.AccessController.doPrivileged(Native Method)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:210)
[INFO] at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:277)
[INFO] at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
[INFO] at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:219)
[INFO] at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:210)
我相信我有 datanucleus-appengine
和 datanucleus
罐子的正确组合:
2.1:需要 DataNucleus 3.1.x(核心、api-jdo、api-jpa、增强器)。需要 SDK 1.6.4+ 请注意,此版本的 Datanucleus 不再是 由 DataNucleus 项目支持
JPA 应用配置:
@Configuration
@EnableJpaRepositories("demo.core.entity")
@EnableTransactionManagement
class JpaApplicationConfig
private static final Logger logger = Logger
.getLogger(JpaApplicationConfig.class.getName());
@Bean
public AbstractEntityManagerFactoryBean entityManagerFactory()
logger.info("Loading Entity Manager...");
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setPersistenceUnitName("transactions-optional");
return factory;
@Bean
public PlatformTransactionManager transactionManager()
logger.info("Loading Transaction Manager...");
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory().getObject());
return txManager;
@Bean
public PersistenceExceptionTranslator persistenceExceptionTranslator()
return new OpenJpaDialect();
Application.java
@Configuration
@ComponentScan
@EnableAutoConfiguration
@RestController
public class Application
private static final EntityManagerFactory INSTANCE =
Persistence.createEntityManagerFactory("transactions-optional");
public static void main(String[] args)
SpringApplication.run(Application.class, args);
@RequestMapping("/")
public String home()
return "Hello World";
POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="...">
<modelVersion>4.0.0</modelVersion>
<groupId>org.demohq</groupId>
<artifactId>demo-boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo-boot</name>
<description>Demo project</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.0.BUILD-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-legacy</artifactId>
<version>1.1.0.BUILD-SNAPSHOT</version>
</dependency>
<!--<dependency>-->
<!--<groupId>net.kindleit</groupId>-->
<!--<artifactId>gae-runtime</artifactId>-->
<!--<version>$gae.version</version>-->
<!--<type>pom</type>-->
<!--<scope>provided</scope>-->
<!--</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<!--<dependency>-->
<!--<groupId>org.hsqldb</groupId>-->
<!--<artifactId>hsqldb</artifactId>-->
<!--<scope>runtime</scope>-->
<!--</dependency>-->
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-labs</artifactId>
<version>$gae.version</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-stubs</artifactId>
<version>$gae.version</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-testing</artifactId>
<version>$gae.version</version>
<scope>test</scope>
</dependency>
<!-- DataNucleus -->
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-api-jpa</artifactId>
<version>$datanucleus.jpa.version</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-core</artifactId>
<version>$datanucleus.jpa.version</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-enhancer</artifactId>
<version>$datanucleus.jpa.version</version>
</dependency>
<dependency>
<groupId>com.google.appengine.orm</groupId>
<artifactId>datanucleus-appengine</artifactId>
<version>$datanucleus.version</version>
<!-- Need to exclude the enhancer since it interfere with the enhancer plugin. -->
<exclusions>
<exclusion>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-enhancer</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.jdo</groupId>
<artifactId>jdo-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jpa_2.0_spec</artifactId>
<version>1.1</version>
</dependency>
<!-- OpenJPA -->
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa-persistence</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
<properties>
<start-class>demo.Application</start-class>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
<m2eclipse.wtp.contextRoot>/</m2eclipse.wtp.contextRoot>
<datanucleus.jpa.version>3.1.1</datanucleus.jpa.version>
<datanucleus.version>2.1.2</datanucleus.version>
<gae.version>1.8.8</gae.version>
<gae.home>$settings.localRepository/com/google/appengine/appengine-java-sdk/$gae.version/appengine-java-sdk/appengine-java-sdk-$gae.version</gae.home>
<gae.application.version>test</gae.application.version>
<!--<org.springframework-version>4.0.5.RELEASE</org.springframework-version>-->
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--
<plugin>
<groupId>net.kindleit</groupId>
<artifactId>maven-gae-plugin</artifactId>
<version>0.9.6</version>
<dependencies>
<dependency>
<groupId>net.kindleit</groupId>
<artifactId>gae-runtime</artifactId>
<version>$gae.version</version>
<type>pom</type>
</dependency>
</dependencies>
</plugin>
-->
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>$gae.version</version>
<configuration>
<enableJarClasses>false</enableJarClasses>
</configuration>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<goals>gae:deploy</goals>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<path>/</path>
</configuration>
</plugin>
<plugin>
<groupId>org.datanucleus</groupId>
<artifactId>maven-datanucleus-plugin</artifactId>
<version>$datanucleus.jpa.version</version>
<configuration>
<api>JPA</api>
<!--<mappingIncludes>**/entity/*.class</mappingIncludes>-->
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-core</artifactId>
<version>$datanucleus.jpa.version</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<!-- We can configure our integration server to activate this profile and
perform gae:deploy, thus uploading latest snapshot to the http://1.latest.<applicationName>.appspot.com
automatically -->
<profile>
<id>integration-build</id>
<properties>
<gae.application.version>stage</gae.application.version>
</properties>
</profile>
<!-- This profile will activate automatically during release and upload
application to the http://2.latest.<applicationName>.appspot.com (We might
want to set the 2nd version as our applications Default version to be accessible
at http://<applicationName>.appspot.com) -->
<profile>
<id>release-build</id>
<activation>
<property>
<name>performRelease</name>
<value>true</value>
</property>
</activation>
<properties>
<!-- During release, set application version in appengine-web.xml to
2 -->
<gae.application.version>release</gae.application.version>
</properties>
</profile>
</profiles>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>http://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>http://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>http://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>http://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
我想知道我的应用中可能缺少什么?我按照这里的说明进行操作Using Spring Data JPA on Google Appengine
【问题讨论】:
如果我注释掉 @EnableAutoConfiguration 我得到:[INFO] WARNING: failed metricFilter: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'metricFilter' is defined 这里是完整的代码:bit.ly/1i53oAq 在我的例子中是spring-boot-starter-data-jpa 【参考方案1】:您没有为 Spring Boot 提供足够的信息来自动配置 DataSource
。为此,您需要使用 spring.datasource
前缀向 application.properties
添加一些属性。查看DataSourceProperties 以查看您可以设置的所有属性。
您需要提供适当的 url 和驱动程序类名称:
spring.datasource.url = …
spring.datasource.driver-class-name = …
【讨论】:
不确定放在这里我正在使用 DataNucleus + Google App Engine @xybrek 只需在您的应用程序中添加 application.properties 文件并在其中添加数据源属性。 spring.datasource.url = jdbc:mysql://localhost/abc #spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.datasource.name=olabsenglishdb 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 我也是这样做的,当我在 intellij 中运行应用程序时代码运行良好,但是当我创建一个 jar 并使用java -jar myJar.jar
运行它时,它给了我同样的错误。
如果确实想在运行时配置数据源怎么办?【参考方案2】:
如果你想使用 Spring Boot starter 中的嵌入式 H2 数据库,请将以下依赖项添加到你的 pom 文件中。
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.156</version>
</dependency>
但正如 cmets 中提到的,嵌入式 H2 数据库将数据保存在内存中,并不会永久存储。
【讨论】:
我在使用 spring-boot-starter-jdbc 时遇到了同样的问题。尝试了这个建议,它解决了我的问题。 这不是真正的解决方案。据我所知,H2 不会永久保存数据。 @SARose - 当然不会!这是一个“内存”数据库。 @user672009,不正确。 H2 不仅是一个内存数据库。见h2database.com/html/features.html。话虽如此,这是一个糟糕的解决方案。 我正在尝试构建某人的应用程序,但出现“无法确定 ... 对于数据库类型 NONE”错误。在尝试了其他解决方案后,我尝试了这个,它可以工作。该应用程序使用两个由属性配置的数据库。我配置了它们,但得到了这个错误。添加 H2 依赖项后,不再出现错误。该应用程序使用我指定的其他数据库,没有任何东西进入 H2,AFAICT。可能是 spring-boot 的副作用或此应用程序设计中的问题,但它需要 H2 才能启动。既然别人有这个问题,那不可能只有这个应用。【参考方案3】:我有同样的问题,排除 DataSourceAutoConfiguration 解决了这个问题。
@SpringBootApplication
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
public class RecommendationEngineWithCassandraApplication
public static void main(String[] args)
SpringApplication.run(RecommendationEngineWithCassandraApplication.class, args);
【讨论】:
谢谢!可以在application.properties
中配置它,比如spring.main.web-environment=false
我在非 SpringBootApplication 类中找到了@EnableAutoConfiguration
,并且还必须在其中添加排除项。 TBH,我可能一开始就不需要@EnableAutoConfiguration
:/【参考方案4】:
这对我有用(1.3.0.M5):
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.boot.autoconfigure.orm.jpa.*;
@Configuration
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class)
public class Application
排除这两个类。
它不适合
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class)
【讨论】:
这个是为那些不明白为什么他们“神秘地”要求他们的应用程序中的数据库访问而他们不应该(例如,当数据库访问正在由其他应用程序和这个应用程序处理时)的人只是一个“客户”)。【参考方案5】:你可以添加
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
到您的application.properties
文件。
【讨论】:
当您有多个配置文件并且其中一个在内存中时,这尤其有用。 对我来说,我还需要排除 HibernateJpaAutoConfiguration 才能工作:spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm。 jpa.HibernateJpaAutoConfiguration【参考方案6】:现在我仔细观察,我认为 DataSource 问题是一个红鲱鱼。 Boot 的 Hibernate 自动配置正在被触发,这就是导致需要 DataSource 的原因。 Hibernate 位于类路径中,因为您依赖于 spring-boot-starter-data-jpa
,它引入了 hibernate-entitymanager
。
更新您的 spring-boot-starter-data-jpa
依赖项以排除 Hibernate:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</exclusion>
</exclusions>
</dependency>
【讨论】:
错误还是一样:-( 您确定已正确应用排除项吗? mvn dependency:tree 将帮助您检查。排除后,DataSource 问题就解决了(我现在看到“类型 demo.core.entity.Resource 不是已知的托管类型”,但这是一个单独的问题) 嗨,安迪,这是否意味着您测试了我发布的实际项目?看起来很有希望 是的,这与您发布的项目有关。我所做的唯一更改是如上所述添加 Hibernate 排除项。 酷,你编译的是master分支,还是JPA分支?【参考方案7】:来自Spring manual。
Spring Boot 可以自动配置嵌入式 H2、HSQL 和 Derby 数据库。您无需提供任何连接 URL,只需将构建依赖项包含到您要使用的嵌入式数据库即可。
例如,典型的 POM 依赖项是:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
对我来说,省略 spring-boot-starter-data-jpa 依赖项而只使用 spring-boot-starter-jdbc 依赖项就像一个魅力,只要我将 h2(或 hsqldb)作为依赖项包含在内。
【讨论】:
【参考方案8】:Spring boot 将在 application.properties 文件中查找数据源属性。
请在 application.properties 或 yml 文件中定义
application.properties
spring.datasource.url=xxx
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driver-class-name=xxx
如果您需要自己的配置,您可以设置自己的配置文件并在创建 bean 时使用数据源值。
【讨论】:
【参考方案9】:如果回答为时已晚,我不会。 我可以通过从 Spring Boot 中排除 DataSourceAutoConfiguration 来解决这个问题。
【讨论】:
在这里找到的排除文档:docs.spring.io/spring-boot/docs/current/reference/html/…【参考方案10】:我在使用 Spring Data 为 ElasticSearch 做 API 时遇到了这个异常。我做了以下,它的工作。
@SpringDataApplication(exclude = DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class)
【讨论】:
【参考方案11】:我对 org.springframework.data 的 groupId 有两个依赖项,然后我删除了 jpa 并仅保留了 mongodb ,它起作用了!
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
【讨论】:
【参考方案12】:由于这是谷歌针对此错误返回的第一个主题之一,因此我将发布我所做的事情,以防有人遇到同样的问题。
我不想排除DataSourceAutoConfiguration
也不使用内存数据库..
在我的情况下,我按照其他回复者所说的那样设置参数,但 application.properties
文件位于错误的文件夹中.. 哈哈
所以如果没有这样的工作,请检查文件是否在 src/main/resources
中!就我而言,它位于src/main/resources/static
【讨论】:
【参考方案13】:我解决了我的问题,只需添加 @AutoConfigureTestDatabase(replace=Replace.NONE)
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace=Replace.NONE)
public class TestClienteRepository
【讨论】:
【参考方案14】:我收到来自o.s.b.d.LoggingFailureAnalysisReporter
的标题中的错误消息以及消息“应用程序无法启动”。事实证明,我没有将-Dspring.profiles.active=dev
添加到我的 Eclipse 调试配置中,所以我没有活动配置文件。
【讨论】:
也是我的问题。将标志添加到调试配置的 VM 参数 (Run -> Debug configurations... -> Maven build -> [build name] -> JRE -> VM arguments
)【参考方案15】:
我也遇到了同样的问题。
Cannot determine embedded database driver class for database type NONE.
在我的情况下,从与数据库对应的存储库中删除 jar 文件可以解决问题。存储库中存在导致问题的损坏的 jar。
【讨论】:
【参考方案16】:在下面使用这个依赖。
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
【讨论】:
我不需要数据库并且收到此错误。我添加了这个并修复了它。【参考方案17】:在我的例子中,我将它放在我的 pom 中的 org.jasig.cas 的 maven 依赖项中,它触发了一个休眠依赖项,并导致 Spring Boot 寻找一个数据源来自动配置休眠持久性。 我按照 user672009 的建议通过添加 com.h2database maven 依赖项解决了这个问题。谢谢大家!
【讨论】:
【参考方案18】:答案很简单,SpringBoot 会寻找 Embeddable 数据库驱动,如果你的配置中没有配置 XML 或 Annotations 的形式,就会抛出这个异常。 像这样在注释中进行更改
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
这将排除 DataSourceAutoConfiguration。
如果您正确配置了您的课程,那么完美的简单编码完成将是有效的。
@Controller
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
public class SimpleController
@RequestMapping("/")
@ResponseBody
String home()
return "Hello World!";
public static void main(String[] args) throws Exception
SpringApplication.run(SimpleController.class, args);
【讨论】:
【参考方案19】:执行以下操作。
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
但是如果我想有dataSource,我不应该做上面的配置。
下面的链接说我们需要 application.properties 文件中的所有属性。所有属性都应该以
spring.datasource.*
http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
【讨论】:
【参考方案20】:如果你真的需要“spring-boot-starter-data-jpa”作为你的项目依赖,同时你又不想让你的应用访问任何数据库,你可以简单地排除自动配置类
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
【讨论】:
【参考方案21】:我尝试了上述所有方法,但无法解决问题。我正在使用 SQLite,我的 SQLite 文件位于资源目录中。
a) 已完成 IDE 设置
我需要在我的项目的 .classpath 文件中手动添加以下行。
<classpathentry kind="src" path="resources"/>
<classpathentry kind="output" path="target/classes"/>
之后,我从顶部的 MenuBar 刷新并清理了项目。比如项目->清理->我的项目名称。
之后,我运行项目并解决了问题。
application.properties 我的项目是
spring.datasource.url=jdbc:sqlite:resources/apiusers.sqlite
spring.datasource.driver-class-name=org.sqlite.JDBC
spring.jpa.properties.hibernate.dialect=com.enigmabridge.hibernate.dialect.SQLiteDialect
spring.datasource.username=
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=update
b) 如果 Jar 部署抛出相同的错误,则设置完成
您需要在 pom.xml 中添加以下行
<build>
<resources>
<resource>
<directory>resources</directory>
<targetPath>$project.build.outputDirectory</targetPath>
<includes>
<include>application.properties</include>
</includes>
</resource>
</resources>
</build>
也许对某人有帮助。
【讨论】:
【参考方案22】:如果您的应用程序中没有任何数据库,只需通过添加以下注释来禁用数据源的自动配置。
@SpringBootApplication(exclude=DataSourceAutoConfiguration.class)
【讨论】:
【参考方案23】:与@Anas 相同。我可以在 Eclipse 中运行它,但是当我使用“java -jar ...”运行它时,它给了我这个错误。然后我发现我的java构建路径错误,它缺少文件夹“src/main/resources”,所以,应用程序找不到application.properties。当我在 java 构建路径中添加“src/main/resources”文件夹时,它起作用了。
而且,您需要在 Application 类中添加“@PropertySource("application.properties")”。
Screenshot-1
Screenshot-2
【讨论】:
【参考方案24】:这就是我解决这个问题的方法。
就我而言:我必须为 MySQL 服务器配置数据源,这是一个外部服务器。
众所周知,Spring boot 能够为嵌入式数据库自动配置 DataSource。
因此,我意识到我必须禁用数据源自动配置才能使用我的自定义配置。
如上所述,我在 application.properties 禁用了 Spring Boot 的自动数据源配置
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
我在一个单独的文件中定义了所有休眠配置属性: hibernate-mysql.properties
然后,我以以下方式编写了我自己的自定义休眠配置并解决了这个问题。
我根据自定义属性文件中的属性配置所需数据源并使用数据源和其他休眠配置填充 LocalSessionFactoryBean 的方法。
Hibernate 自定义配置类:----------------------------- -----------------------------
Hibernate Custom Configuration
【讨论】:
【参考方案25】:在我的情况下,使用 IDEA,删除 out
目录后,一切恢复正常。我只是不知道为什么,但它成功了。
【讨论】:
【参考方案26】:我有类似的问题,排除 DataSourceAutoConfiguration 和 HibernateJpaAutoConfiguration 解决了这个问题。
我在我的 application.properties 文件中添加了这两行并且它起作用了。
> spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
> spring.autoconfigure.exclude[1]=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
【讨论】:
【参考方案27】:已经发布了足够多的答案。但是,我将发布我犯了什么错误以及如何纠正它。
就我而言,我已将我的项目打包为 pom
而不是 jar
pom.xml:
...
<packaging>pom</packaging>
...
改为:
...
<packaging>jar</packaging>
...
这可能对有同样错误的人有所帮助。
【讨论】:
【参考方案28】:您可以从Maven Repository 下载 derby-10.10.1.1.jar 并将其放在您的 WEB-INF/lib 文件夹中,例如 Application/WEB-INF/lib/derby-10.10.1.1.jar。 您的嵌入式 AnnotationConfigEmbeddedWebApplicationContext 将获取数据库驱动程序,您的网络服务器将开始运行而不会出现任何问题:-)
【讨论】:
【参考方案29】:如果您使用的是 Gradle,请包含以下驱动程序的正确 jar:
compile("org.mongodb:mongo-java-driver:3.3.0")
或者如果使用 Maven,然后以 Maven 风格进行,它应该可以解决您的问题。
【讨论】:
【参考方案30】:致所有在头撞墙数小时后来到此线程的人。我通过更改解决了这个错误
create table `group`(
id char(19) primary key
);
到
create table if not exists `group`(
id char(19) primary key
);
在我的资源目录中的 schema.sql 文件中。
【讨论】:
以上是关于Spring Boot - 无法确定数据库类型 NONE 的嵌入式数据库驱动程序类的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot无法从数据源(mysql)确定jdbc url
Spring Boot JPA MySQL:无法确定合适的驱动程序类
HttpMediaTypeNotSupportedException:不支持内容类型“应用程序/表单数据”spring-boot