【问题标题】:BeanCreationException: Cannot determine embedded database driver class for database type NONEBeanCreationException:无法确定数据库类型 NONE 的嵌入式数据库驱动程序类
【发布时间】:2016-02-16 01:03:58
【问题描述】:

我正在尝试运行我的程序,我总是得到这个异常:

Caused by: 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.
at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.getDriverClassName(DataSourceProperties.java:137)
at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource(DataSourceAutoConfiguration.java:117)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 45 more

我正在通过 gradle 导入所有依赖项:

buildscript {
repositories {
    mavenCentral()
}
dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.7.RELEASE")
}
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'

jar {
baseName = 'flatify-backend-service'
version =  '0.1.0'
}

repositories {
mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
compile 'org.hibernate:hibernate-core:4.3.6.Final'
compile 'javax.servlet:javax.servlet-api:3.1.0'
compile 'org.javassist:javassist:3.15.0-GA'
compile 'mysql:mysql-connector-java:5.1.31'
compile 'commons-dbcp:commons-dbcp:1.4'
testCompile("junit:junit")
testCompile("org.springframework:spring-test")
}

task wrapper(type: Wrapper) {
gradleVersion = '2.5'
}

如您所见,我正在添加 mysql-connector 是不是应该将驱动程序类添加到我的项目中? 我错过了什么吗?

我只添加了最后一个异常,因为所有其他异常都是由这个引起的。 如果您需要任何其他详细信息,请告诉我。

谢谢

我的配置类:

@Configuration
@EnableTransactionManagement
public class PersistenceJPAConfig {

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource());
    em.setPackagesToScan(new String[] { "at.flatify.persistance.entity" });

    JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    em.setJpaVendorAdapter(vendorAdapter);
    em.setJpaProperties(additionalProperties());

    return em;
}


@Bean(destroyMethod = "close")
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/flatify");
    dataSource.setUsername("user");
    dataSource.setPassword("password");

    return dataSource;
}

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(emf);

    return transactionManager;
}

@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
    return new PersistenceExceptionTranslationPostProcessor();
}

Properties additionalProperties() {
    Properties properties = new Properties();
    properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
    properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
    return properties;
}

}

【问题讨论】:

标签: java mysql gradle spring-data-jpa


【解决方案1】:

Spring boot 无法确定使用哪个驱动程序。您需要在某处指定以下属性: spring.datasource.driverClassName 您还需要指定其他属性,请查看文档。

【讨论】:

  • 是的,我有一个配置类,我在其中指定了所有这些属性。
  • 您能粘贴相关属性(包括任何连接网址)吗?这会有所帮助吗?当然,用虚拟凭证替换任何凭证。
  • 查看堆栈跟踪,看起来 DataSourceAutoConfiguration 正在忽略您在配置中的设置。 (因为您使用的是spring boot)您是否尝试排除 DataSourceAutoConfiguration.class ?除此之外,如果你想走 springboot 路线,它需要你在 application.properties 文件中专门提供 spring.datasource.driverClassName ,仅在配置中设置驱动程序类名是不够的。
  • 我在课堂上添加了“@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})”,对吧?没有变化,仍然是同样的错误。还是我必须将排除项放在其他地方?
  • 我已经将 application.properties 文件添加到我的项目根目录。虽然我不确定我为什么需要它,但它不是多余的吗?但不管有没有文件,我总是遇到同样的异常。
【解决方案2】:

我遇到了同样的问题,我通过在我的项目的类路径中简单地添加一个 eclipselink-javax.persistence-2.0 jar 来解决它。 您可以从下面给出的链接下载它。 或者简单地添加添加以下依赖项

<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.0.0</version>
</dependency>

Jar download Link

【讨论】:

    【解决方案3】:

    您需要禁用(排除)DataSourceAutoConfiguration 或删除数据源的类 PersistenceJPAConfig 配置并使用 application.properties 进行配置。

    spring 文档中的一个很好的例子:https://spring.io/guides/gs/accessing-data-mysql/

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 2019-04-09
      • 2014-07-27
      • 2018-02-12
      • 2018-07-10
      • 2018-01-04
      • 2018-03-28
      • 1970-01-01
      相关资源
      最近更新 更多