Spring Boot-无法确定数据库类型NONE的嵌入式数据库驱动程序类


210

这是尝试运行我的Web应用程序时抛出的错误:

[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-appenginedatanucleus罐子的搭配正确:

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();
    }
}

应用程序

@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>

我想知道我的应用程序中可能缺少什么?我按照此处的说明在Google Appengine上使用Spring Data JPA


如果我将@EnableAutoConfiguration注释掉,则会得到:[信息]警告:metricFilter失败:org.springframework.beans.factory.NoSuchBeanDefinitionException:未定义名为“ metricFilter”的bean
夸克

这是完整的代码:bit.ly/1i53oAq
夸克

Answers:


170

您没有为Spring Boot提供足够的信息来自动配置DataSource。为此,您需要application.properties使用spring.datasource前缀添加一些属性。看看DataSourceProperties以查看可以设置的所有属性。

您需要提供适当的url和驱动程序类名称:

spring.datasource.url = 
spring.datasource.driver-class-name = 

3
不知道要放在这里什么我正在使用DataNucleus + Google App Engine
夸克2014年

@xybrek只需在应用程序中添加application.properties文件,然后在其中添加数据源属性。
iCrus

1
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
swapyonubuntu

1
我做了同样的事情,当我在intellij中运行应用程序时,代码运行良好,但是当我创建一个jar并使用java -jar myJar.jar它运行它时,我却得到了同样的错误。
阿纳斯

1
@AndyWilkinson大家好,我的spring boot cassandra代码遇到相同的错误。我正在尝试连接到cassandra。在cassandra连接中,您不提供 spring.datasource.url = … spring.datasource.driver-class-name = …属性。所以我增加@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})了我的主课。但是现在放这个之后我就出错了Parameter 0 of constructor in org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration required a bean of type 'javax.sql.DataSource' that could not be found.。请帮忙。
kumarhimanshu449

113

如果您想使用Spring Boot启动程序中的嵌入式H2数据库,请将以下依赖项添加到pom文件中。

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.3.156</version>
    </dependency>

但是正如评论中提到的那样,嵌入式H2数据库将数据保留在内存中,并且不会永久存储。


2
我在spring-boot-starter-jdbc中遇到了同样的问题。尝试了这个建议,并解决了我的问题。
bluecollarcoder

3
这不是一个真正的解决方案。据我所知,H2不会永久保存数据。
SARose

10
@SARose-当然不会!这是一个“内存中”数据库。
user672009 2015年

1
@ user672009,不正确。H2不仅是内存数据库。请参阅h2database.com/html/features.html。话虽如此,这对于解决这个问题是一个糟糕的解决方案。
杰森·尼科尔斯

5
我正在尝试构建某人的应用程序,并且出现此“无法确定...数据库类型为NONE”的错误。在尝试了其他解决方案之后,我尝试了这一解决方案,并且该方法可行。该应用程序使用了两个由属性配置的数据库。我配置了它们,但出现此错误。添加H2依赖关系后,不再有错误。该应用程序使用了我指定的其他数据库,而H2和AFAICT则一无所获。可能是弹簧启动的副作用,或者是此应用程序设计中的问题,但在启动之前需要H2。由于其他人有此问题,因此不能仅此应用程序。
LS

87

我会遇到同样的问题,并且排除DataSourceAutoConfiguration即可解决该问题。

@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class RecommendationEngineWithCassandraApplication {

    public static void main(String[] args) {
        SpringApplication.run(RecommendationEngineWithCassandraApplication.class, args);
    }
}

3
谢谢!可以配置它application.properties,例如spring.main.web-environment=false
zhuguowei

1
@EnableAutoConfiguration在非SpringBootApplication类中找到了,并且也不得不在其中添加排除项。TBH,我可能@EnableAutoConfiguration首先不需要那里:/
cs94njw

63

这对我有用(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})

7
这是针对那些不了解为什么他们“神秘地”在不应该(例如,当数据库访问由其他应用程序处理且该应用程序只是一个“客户端”)时“神秘地”要求在其应用程序中进行数据库访问的人的。
cst1992

31

你可以加

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration   

到您的application.properties文件。


2
如果不需要jdbc数据源,这应该是可接受的答案。
Farrukh Najmi

当您有多个配置文件并且其中一个位于内存中时,此功能特别有用。
Doe Johnson,

对我来说,我还需要请HibernateJpaAutoConfiguration才能工作:spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
AbdelRahmane

20

现在,我仔细看一下,我认为DataSource问题是一条红线。Boot的Hibernate自动配置正在被触发,这就是导致需要DataSource的原因。Hibernate在classpath上,因为您依赖于spring-boot-starter-data-jpapulls in hibernate-entitymanager

更新您的spring-boot-starter-data-jpa依赖项以排除休眠:

<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>

1
错误仍然相同:-(
夸克

您确定已正确应用排除规则?mvndependency:tree将帮助您检查。排除数据源后,DataSource问题消失了(我现在看到“ Type demo.core.entity.Resource不是已知的托管类型”,但这是一个单独的问题)
Andy Wilkinson

嗨,安迪,这是否意味着您测试了我发布的实际项目?看起来很有希望
夸克2014年

1
是的,那是您发布的项目。我所做的唯一更改是如上所述添加了Hibernate排除项。
安迪·威尔金森

太酷了,看来您编译的是master分支还是JPA分支?
夸克2014年

14

摘自Spring手册

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>

对我来说,只要我将h2(或hsqldb)包括为依赖项,就不用考虑spring-boot-starter-data-jpa依赖项,而仅使用spring-boot-starter-jdbc依赖项就可以发挥作用。


9

Spring Boot将在application.properties文件中查找datasoure属性。

请在application.properties或yml文件中定义

application.properties

spring.datasource.url=xxx
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driver-class-name=xxx

如果需要自己的配置,则可以在创建bean时设置自己的概要文件并使用数据源值。



5

我在使用Spring Data为ElasticSearch编写API时遇到了此异常。我做了以下工作。

@SpringDataApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})

3

我对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>

2

我只需添加@AutoConfigureTestDatabase(replace = Replace.NONE)就可以解决我的问题

@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace=Replace.NONE)
public class TestClienteRepository {

}

2

我从标题中收到了错误消息o.s.b.d.LoggingFailureAnalysisReporter以及消息“ APPLICATION FAILED TO START”。原来,我没有添加-Dspring.profiles.active=dev到Eclipse调试配置中,所以我没有活动的配置文件。


1
正是我的问题。将标记添加到调试配置的VM参数(Run -> Debug configurations... -> Maven build -> [build name] -> JRE -> VM arguments
sshow

2

我也面临同样的问题。

Cannot determine embedded database driver class for database type NONE.

就我而言,从对应于数据库的存储库中删除jar文件可解决此问题。存储库中存在损坏的jar,这是导致此问题的原因。


1

在我的案例中,我在pom中将其作为org.jasig.cas的maven依赖关系,该依赖关系触发了休眠依赖关系,并导致Spring Boot寻找自动配置休眠持久性的数据源。我通过添加user672009建议的com.h2database maven依赖关系来解决此问题。多谢你们!


1

由于这是该错误在google中返回的第一个主题之一,因此我将发布我做过的事情,以防有人遇到相同的问题。.我不想排除 DataSourceAutoConfiguration

就我而言,我是按照其他回复者所说的来设置参数,但是 application.properties文件位于错误的文件夹中。

因此,如果这种方法无效,请检查文件是否在其中src/main/resources!以我为例src/main/resources/static


1

答案很简单,SpringBoot会寻找Embeddable数据库驱动程序,如果您没有以XML或Annotations的形式进行任何配置,它将抛出此异常。像这样在注释中进行更改

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
这将排除DataSourceAutoConfiguration。如果正确配置了类,则可以完成Perfect Simple Coding。

    @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);
       }
    }



1

如果您确实需要“ spring-boot-starter-data-jpa”作为项目依赖项,同时又不想允许您的应用访问任何数据库,则可以简单地排除自动配置类

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

1

我尝试了上述所有问题,但无法解决问题。我正在使用SQLite,而我的SQLite文件位于资源目​​录中。

a)为IDE完成设置

我需要在项目的.classpath文件中手动添加以下行。

<classpathentry kind="src" path="resources"/>
<classpathentry kind="output" path="target/classes"/>

之后,我从顶部的MenuBar刷新并清除了该项目。例如Project-> Clean-> My Project Name。

之后,我运行该项目并解决了问题。

我项目的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>

可能对某人有帮助。


1

如果您的应用程序中没有任何数据库,只需添加以下注释即可禁用数据源的自动配置。

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

1

与@Anas相同。我可以在Eclipse中运行它,但是当我使用“ java -jar ...”运行它时,它给了我这个错误。然后我发现我的Java构建路径是错误的,它缺少文件夹“ src / main / resources”,因此,应用程序找不到application.properties。当我在Java构建路径中添加“ src / main / resources”文件夹时,它起作用了。

并且,您需要在Application类中添加“ @PropertySource({“ application.properties”}))”。

屏幕截图1

屏幕截图2


谢谢!我已经尝试了四个小时
SantiagoMartíOlbrich,

1

这就是我解决此问题的方法。

在我的情况下:我必须为MySQL Server(这是一台外部服务器)配置数据源。

众所周知,Spring Boot具有为嵌入式数据库自动配置DataSource的功能。

因此,我意识到必须禁用数据源自动配置才能使用自定义配置。

如上文所述,我在application.properties上禁用了Spring Boot的自动数据源配置

spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

我在一个单独的文件中定义了所有的休眠配置属性:hibernate-mysql.properties

然后,我按照以下方式编写了自己的自定义休眠配置,它解决了该问题。

我的方法是基于自定义属性文件中的属性配置所需的数据源,并用数据源和其他休眠配置填充LocalSessionFactoryBean。

休眠自定义配置类:
--------------------------------------------- -------------

休眠自定义配置


1

在下面的依赖项中使用。

<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
   <scope>runtime</scope>
</dependency>

我不需要数据库,但出现此错误。我添加了它并修复了它。
markthegrea

1

在我的情况下,使用IDEA,在移除out错误后,一切都会恢复正常。我只是不知道为什么,但是效果很好。


1

我会遇到类似的问题,并将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

1

已经发布了足够多的答案。但是,我要发布我犯了什么错误以及如何纠正它。

就我而言,我将项目打包pomjar

pom.xml:

...
 <packaging>pom</packaging>
...

变成:

...
 <packaging>jar</packaging>
...

对于有相同错误的人可能会有所帮助。


0

您可以从Maven存储库下载derby-10.10.1.1.jar 并将其放置在WEB-INF / lib文件夹中,例如Application / WEB-INF / lib / derby-10.10.1.1.jar。您的嵌入式AnnotationConfigEmbeddedWebApplicationContext将拾取数据库驱动程序,并且您的Web服务器将开始运行,而不会出现任何问题:-)


0

如果您使用的是Gradle,请添加如下所示的驱动程序罐:

compile("org.mongodb:mongo-java-driver:3.3.0")

或者,如果使用Maven然后以Maven样式进行操作,则它应该可以解决您的问题。


0

对于在将头部撞到墙上数小时后遇到此问题的任何人。我通过更改解决了这个错误

create table `group`(
    id char(19) primary key
);

create table if not exists `group`(
    id char(19) primary key
);

在我的schema.sql文件中的resources目录中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.