Spring Boot - Không thể xác định lớp trình điều khiển cơ sở dữ liệu nhúng cho loại cơ sở dữ liệu KHÔNG.


210

Đây là lỗi được ném khi cố chạy ứng dụng web của tôi:

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

Tôi tin rằng tôi có sự kết hợp đúng datanucleus-appenginedatanucleuslọ:

2.1: Yêu cầu DataNucleus 3.1.x (lõi, api-jdo, api-jpa, bộ tăng cường). Yêu cầu SDK 1.6.4+ Lưu ý rằng bản phát hành Datanucleus này không còn được hỗ trợ bởi dự án DataNucleus

Cấu hình ứng dụng 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>

Tôi tự hỏi những gì có thể thiếu trong ứng dụng của tôi? Tôi đã làm theo hướng dẫn từ đây Sử dụng Spring Data JPA trên Google Appengine


Nếu tôi nhận xét ra @EnableAutoConfiguration tôi nhận được: [INFO] CẢNH BÁO: không metricFilter: org.springframework.beans.factory.NoSuchBeanDefinitionException: Không đậu có tên là 'metricFilter' được định nghĩa
quark

Đây là mã hoàn chỉnh: bit.ly/1i53oAq
quark

Trong trường hợp của tôi, đó là spring-boot-starter-data-
jpa

Câu trả lời:


170

Bạn chưa cung cấp Spring Boot với đủ thông tin để tự động định cấu hình a DataSource. Để làm như vậy, bạn sẽ cần thêm một số thuộc tính application.propertiesvới spring.datasourcetiền tố. Hãy xem DataSourceProperies để xem tất cả các thuộc tính mà bạn có thể đặt.

Bạn sẽ cần cung cấp url và tên lớp trình điều khiển thích hợp:

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

3
không chắc chắn nên đặt gì ở đây Tôi đang sử dụng DataNucleus + Google App Engine
quark

@xyenamek Chỉ cần thêm tệp application.properIES trong ứng dụng của bạn và thêm các thuộc tính nguồn dữ liệu trong đó.
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.pass spring.datasource.driver-class-name = com.mysql.jdbc.Driver spring.jpa.database = mysql spring.jpa.database-platform = org.hibernate.dialect.MyQueryDialect
swaccoonubfox 23/8/2015

1
Tôi đã làm như vậy, mã đang hoạt động tốt khi tôi chạy ứng dụng trong intellij nhưng khi tôi tạo một jar và chạy nó bằng cách sử dụng java -jar myJar.jarthì nó cũng gây ra lỗi tương tự.
Anas

1
Xin chào @AndyWilkinson Tôi đang gặp phải lỗi tương tự với mã cassandra khởi động mùa xuân của tôi. Ở đó tôi đang cố gắng kết nối với cassandra. Và trong kết nối cassandra bạn không cung cấp spring.datasource.url = … spring.datasource.driver-class-name = …tài sản. Vì vậy, tôi đã thêm @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})vào lớp học chính của mình. Nhưng sau khi đặt điều này bây giờ tôi nhận được lỗi 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.. Xin vui lòng giúp đỡ.
kumarhimanshu449

113

Nếu bạn muốn sử dụng cơ sở dữ liệu H2 nhúng từ bộ khởi động Spring Boot, hãy thêm phần phụ thuộc bên dưới vào tệp pom của bạn.

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

Nhưng như đã đề cập trong các bình luận, cơ sở dữ liệu H2 nhúng sẽ giữ dữ liệu trong bộ nhớ và không lưu trữ vĩnh viễn.


2
Tôi đã có cùng một vấn đề với spring-boot-starter-jdbc. Đã thử đề nghị này và nó đã khắc phục vấn đề của tôi.
bluecollarcoder

3
Đây không phải là một giải pháp thực sự. H2 sẽ không lưu dữ liệu vĩnh viễn theo như tôi biết.
SARose

10
@SARose - Tất nhiên là không! Đó là một cơ sở dữ liệu "trong bộ nhớ".
dùng672009

1
@ user672009, không chính xác. H2 không chỉ là một cơ sở dữ liệu bộ nhớ. Xem h2database.com/html/features.html . Với những gì đã nói, đây là một giải pháp kém cho vấn đề.
Jason Nichols

5
Tôi đang cố gắng xây dựng ứng dụng của ai đó và tôi nhận được lỗi "Không thể xác định ... cho loại cơ sở dữ liệu KHÔNG". Sau khi thử các giải pháp khác, tôi thử cái này và nó hoạt động. Ứng dụng được tạo ra để sử dụng hai DB, được cấu hình bởi các thuộc tính. Tôi đã cấu hình chúng, nhưng đã gặp lỗi này. Sau khi tôi thêm phụ thuộc H2, không còn lỗi nữa. Ứng dụng sử dụng các DB khác mà tôi đã chỉ định, không có gì chuyển sang H2, AFAICT. Có thể là một tác dụng phụ của spring-boot hoặc một vấn đề trong thiết kế của ứng dụng này, nhưng nó yêu cầu H2 trước khi nó bắt đầu. Vì những người khác có vấn đề này, nó không thể chỉ là ứng dụng này.
LS

87

Tôi cũng gặp vấn đề tương tự và loại trừ DataSourceAutoConfiguration đã giải quyết vấn đề.

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

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

3
Cảm ơn! có thể cấu hình nó trong application.properties, nhưspring.main.web-environment=false
zhuguowei

1
Tôi đã tìm thấy @EnableAutoConfigurationtrong một lớp không phải SpringBootApplication và cũng phải thêm loại trừ ở đó. TBH, có lẽ tôi không cần @EnableAutoConfigurationở đó ngay từ đầu: /
cs94njw 20/12/18

63

Điều này làm việc cho tôi (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 {

Loại trừ cả hai lớp.

Nó không hoạt động với

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

7
Ứng dụng này dành cho những người không hiểu tại sao họ 'bí ẩn' yêu cầu quyền truy cập cơ sở dữ liệu trong ứng dụng của họ khi họ không nên (ví dụ: khi quyền truy cập cơ sở dữ liệu đang được xử lý bởi một số ứng dụng khác và ứng dụng này chỉ là 'máy khách').
cst1992

31

Bạn có thể thêm

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

vào application.propertiestập tin của bạn .


2
Đây phải là câu trả lời được chấp nhận nếu bạn không cần nguồn dữ liệu jdbc.
Farrukh Najmi

Điều này đặc biệt hữu ích khi bạn có nhiều hồ sơ và một trong số đó là trong bộ nhớ.
Doe Johnson

Đối với tôi, tôi cần phải exluse HibernateJpaAutoConfiguration cũng để làm việc: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
AbdelRahmane

20

Bây giờ tôi nhìn gần hơn, tôi nghĩ rằng vấn đề DataSource là cá trích đỏ. Cấu hình tự động Hibernate của Boot đang được kích hoạt và đó là nguyên nhân khiến DataSource được yêu cầu. Hibernate nằm trên đường dẫn lớp vì bạn có một sự phụ thuộc vào spring-boot-starter-data-jpađó hibernate-entitymanager.

Cập nhật spring-boot-starter-data-jpasự phụ thuộc của bạn để loại trừ 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>

1
Lỗi vẫn như cũ :-(
quark

Bạn có chắc chắn đã áp dụng loại trừ đúng cách? phụ thuộc mvn: cây sẽ giúp bạn kiểm tra. Với việc loại trừ tại chỗ, vấn đề DataSource đã xảy ra với tôi (bây giờ tôi thấy "Loại demo.core.entity.Resource không phải là loại được quản lý đã biết", nhưng đó là một vấn đề riêng biệt)
Andy Wilkinson

Xin chào Andy có nghĩa là bạn đã thử nghiệm dự án thực tế tôi đã đăng? có vẻ đầy hứa hẹn
quark

1
Vâng, đó là với dự án bạn đã đăng. Thay đổi duy nhất tôi đã thực hiện là thêm loại trừ Hibernate như được mô tả ở trên.
Andy Wilkinson

Thật tuyệt, có vẻ như những gì bạn đã biên soạn là chi nhánh chính hoặc chi nhánh JPA?
quark

14

Từ sổ tay mùa xuân .

Spring Boot có thể tự động định cấu hình cơ sở dữ liệu H2, HSQL và Derby nhúng. Bạn không cần cung cấp bất kỳ URL kết nối nào, chỉ cần bao gồm một phụ thuộc xây dựng vào cơ sở dữ liệu được nhúng mà bạn muốn sử dụng.

Ví dụ: các phụ thuộc POM điển hình sẽ là:

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

Đối với tôi, tôi không còn phụ thuộc spring-boot-starter-data-jpa và chỉ sử dụng phụ thuộc spring-boot-starter-jdbc hoạt động như một bùa mê, miễn là tôi có h2 (hoặc hsqldb) làm phụ thuộc.


9

Spring boot sẽ tìm các thuộc tính dataoure trong tệp application.properIES.

Vui lòng xác định nó trong tệp application.properies hoặc yml

ứng dụng

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

Nếu bạn cần cấu hình của riêng mình, bạn có thể thiết lập hồ sơ của riêng mình và sử dụng các giá trị nguồn dữ liệu trong khi tạo bean.


7

Tôi không biết nếu quá muộn để trả lời. Tôi có thể giải quyết vấn đề này bằng cách loại trừ DataSourceAutoConfiguration khỏi khởi động mùa xuân.


3
Tài liệu về exluding tìm thấy ở đây: docs.spring.io/spring-boot/docs/current/reference/html/...
cạo

Không quá muộn đối với tôi. Đây là cách đơn giản nhất để giải quyết vấn đề cho dự án của tôi.
Jeff Pháp

5

Tôi đã phải đối mặt với ngoại lệ này khi tôi đang thực hiện API cho ElasticSearch bằng Spring Data. Tôi đã làm như sau và nó đã làm việc.

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

3

Tôi đã có hai phụ thuộc với groupId của org.springframework.data, sau đó tôi loại bỏ jpa và chỉ giữ mongodb, và nó đã hoạt động!

<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

Tôi giải quyết vấn đề của mình chỉ bằng cách thêm @AutoConfigureTestDatabase (thay thế = Thay thế.NONE)

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

}

2

Tôi đã nhận được thông báo lỗi trong tiêu đề o.s.b.d.LoggingFailureAnalysisReportercùng với thông báo "ỨNG DỤNG KHÔNG ĐƯỢC BẮT ĐẦU". Hóa ra tôi đã không thêm vào -Dspring.profiles.active=devcấu hình gỡ lỗi Eclipse nên tôi không có hồ sơ hoạt động.


1
Chính xác vấn đề của tôi là tốt. Thêm cờ vào các đối số VM của cấu hình gỡ lỗi ( Run -> Debug configurations... -> Maven build -> [build name] -> JRE -> VM arguments)
sshow

2

Tôi cũng phải đối mặt với cùng một vấn đề.

Cannot determine embedded database driver class for database type NONE.

Trong trường hợp của tôi, việc xóa tệp jar khỏi kho lưu trữ tương ứng với cơ sở dữ liệu sẽ khắc phục sự cố. Có lỗi jar hiện diện trong kho lưu trữ gây ra vấn đề.


1

Trong trường hợp của tôi, tôi đặt nó là một phụ thuộc maven cho org.jasig.cas trong pom của tôi đã kích hoạt một phụ thuộc ngủ đông và điều đó khiến Spring Boot tìm kiếm một nguồn dữ liệu để tự động cấu hình sự tồn tại của chế độ ngủ đông. Tôi đã giải quyết nó bằng cách thêm phụ thuộc maven com.h2database theo đề xuất của user672009. Cảm ơn các bạn!


1

Vì đây là một trong những chủ đề đầu tiên được trả lại trong google cho lỗi này, tôi sẽ đăng những gì tôi đã làm trong trường hợp ai đó gặp phải vấn đề tương tự .. Tôi không muốn loại trừ DataSourceAutoConfigurationkhông sử dụng cơ sở dữ liệu bộ nhớ ..

Trong trường hợp của tôi, tôi đã thiết lập các tham số như các trình bổ sung khác đã nói nhưng application.propertiestệp nằm trong thư mục sai .. lol

Vì vậy, trong trường hợp không có gì như thế này hoạt động, kiểm tra xem các tập tin là bên trong src/main/resources! Trong trường hợp của tôi, nó đã ở bên trongsrc/main/resources/static


1

Câu trả lời rất đơn giản, SpringBoot sẽ tìm trình điều khiển cơ sở dữ liệu có thể nhúng, Nếu bạn không cấu hình trong bất kỳ cấu hình nào của bạn dưới dạng XML hoặc Chú thích, nó sẽ ném ngoại lệ này. Thực hiện các thay đổi trong chú thích của bạn như thế này

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
điều này sẽ loại trừ DataSourceAutoConfiguration. Và việc hoàn thành Mã đơn giản hoàn hảo sẽ hoạt động nếu bạn đã cấu hình đúng lớp của mình.

    @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

Làm dưới đây hoạt động.

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

Nhưng nếu tôi muốn có dataSource, tôi không nên thực hiện cấu hình trên. Liên kết dưới đây nói rằng chúng ta cần tất cả các thuộc tính trong tệp application.properIES. Tất cả các thuộc tính nên bắt đầu bằng spring.datasource.*

http://docs.spring.io/spring-boot/docs/civerse/reference/html/common-application-properIES.html


1

Nếu bạn thực sự cần "spring-boot-starter-data-jpa" làm phụ thuộc dự án của bạn và đồng thời bạn không muốn cho phép ứng dụng của mình truy cập vào bất kỳ cơ sở dữ liệu nào, bạn chỉ cần loại trừ các lớp cấu hình tự động

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

1

Tôi đã thử tất cả những điều được đề cập ở trên nhưng không thể giải quyết vấn đề. Tôi đang sử dụng SQLite và tệp SQLite của tôi nằm trong thư mục tài nguyên.

a) Thiết lập xong cho IDE

Tôi cần phải thêm thủ công các dòng dưới đây trong tệp. Classpath của dự án của tôi.

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

Sau đó, tôi làm mới và làm sạch dự án từ MenuBar ở trên cùng. như Dự án-> Sạch-> Tên dự án của tôi.

Sau đó, tôi chạy dự án và vấn đề được giải quyết.

application.properations cho dự án của tôi là

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) Thiết lập xong nếu triển khai Jar ném cùng một lỗi

Bạn cần thêm các dòng sau vào pom.xml của bạn

  <build>
        <resources>
        <resource>
            <directory>resources</directory>
            <targetPath>${project.build.outputDirectory}</targetPath>
            <includes>
                <include>application.properties</include>
            </includes>
        </resource>
    </resources>
</build>

Có thể nó có thể giúp ai đó.


1

nếu bạn không có bất kỳ cơ sở dữ liệu nào trong ứng dụng của mình, chỉ cần vô hiệu hóa cấu hình tự động của nguồn dữ liệu bằng cách thêm chú thích bên dưới.

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

1

Tương tự với @Anas. Tôi có thể chạy nó trong Eclipse, nhưng khi tôi sử dụng "java -jar ..." thì nó chạy, nó gây ra lỗi này. Sau đó, tôi thấy đường dẫn xây dựng java của mình bị sai, nó thiếu thư mục Src / main / resource, vì vậy, ứng dụng không thể tìm thấy application.properations. Khi tôi thêm thư mục src / main / resource vào đường dẫn xây dựng java, nó đã hoạt động.

Và, bạn cần thêm "@PropertySource ({" application.properIES "})" trong lớp Ứng dụng của bạn.

Ảnh chụp màn hình-1

Ảnh chụp màn hình-2


Cảm ơn! Tôi đã cố gắng bốn giờ
Santiago Martí Olbrich

1

Đây là cách tôi giải quyết vấn đề này.

Trong trường hợp của tôi: Tôi phải định cấu hình nguồn dữ liệu cho Máy chủ MySQL, là Máy chủ bên ngoài.

Như chúng ta đã biết, Spring boot có khả năng tự động cấu hình DataSource cho cơ sở dữ liệu nhúng.

Vì vậy, tôi nhận ra rằng tôi phải vô hiệu hóa cấu hình tự động nguồn dữ liệu để sử dụng cấu hình tùy chỉnh của mình.

Như nhiều người đã đề cập ở trên, tôi đã tắt cấu hình DataSource tự động của Spring Boot tại application.properies

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

Tôi đã xác định tất cả các thuộc tính cấu hình ngủ đông trong một tệp riêng: hibernate-mysql.properies

Sau đó, tôi đã mã hóa Cấu hình ngủ đông tùy chỉnh của riêng mình theo cách sau và nó đã giải quyết được vấn đề.

Cách của tôi để định cấu hình DataSource mong muốn dựa trên các thuộc tính trong tệp thuộc tính tùy chỉnh và điền vào LocalSessionFactoryBean với nguồn dữ liệu của bạn và cấu hình ngủ đông khác.

Lớp cấu hình tùy chỉnh Hibernate: -
-------------------------------------------- -------------

Cấu hình tùy chỉnh Hibernate


1

Sử dụng điều này dưới đây phụ thuộc.

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

Tôi không cần một cơ sở dữ liệu và đã nhận được lỗi này. Tôi đã thêm nó và nó đã sửa nó.
markthegrea

1

Trong trường hợp của tôi, sử dụng IDEA, sau khi loại bỏ outdirecory, sau đó mọi thứ trở lại bình thường. Tôi chỉ không biết tại sao, nhưng nó đã thành công.


1

Tôi có vấn đề tương tự và loại trừ DataSourceAutoConfiguration và HibernateJpaAutoConfiguration đã giải quyết vấn đề.

Tôi đã thêm hai dòng này vào tệp application.properIES của mình và nó đã hoạt động.

> spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
> spring.autoconfigure.exclude[1]=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

1

Đã đủ câu trả lời đã được đăng. Tuy nhiên, tôi đang đăng những gì tôi đã làm và cách tôi sửa nó.

Trong trường hợp của tôi, tôi đã đóng gói dự án của mình pomthay vìjar

tệp pom.xml:

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

Thay đổi để:

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

Nó có thể hữu ích cho một người có cùng một sai lầm.


0

Bạn có thể tải xuống derby-10.10.1.1.jar từ Kho lưu trữ Maven và đặt nó vào thư mục WEB-INF / lib của bạn, như Ứng dụng này / WEB-INF / lib / derby-10.10.1.1.jar. AnnotationConfigEmbeddedWebApplicationContext được nhúng của bạn sẽ chọn trình điều khiển cơ sở dữ liệu và máy chủ web của bạn sẽ bắt đầu chạy mà không gặp sự cố nào :-)


0

Nếu bạn đang sử dụng Gradle, hãy bao gồm đúng trình điều khiển như bên dưới:

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

Hoặc nếu sử dụng Maven thì hãy làm theo kiểu Maven, nó sẽ giải quyết vấn đề của bạn.


0

Cho bất cứ ai đến với chủ đề này sau nhiều giờ đập đầu vào tường. Tôi đã giải quyết lỗi này bằng cách thay đổi

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

đến

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

trong tập tin lược đồ của tôi trong thư mục tài nguyên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.