Spring Boot - ไม่สามารถกำหนดคลาสไดร์เวอร์ฐานข้อมูลแบบฝังสำหรับประเภทฐานข้อมูล NONE


210

นี่เป็นข้อผิดพลาดที่เกิดขึ้นเมื่อพยายามเรียกใช้แอปพลิเคชันเว็บของฉัน:

[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 (core, api-jdo, api-jpa, enhancer) ต้องใช้ 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>

ฉันสงสัยว่าแอพของฉันจะหายไปได้อย่างไร ฉันทำตามคำแนะนำจากที่นี่โดยใช้ Spring Data JPA บน Google Appengine


หากฉันคอมเมนต์ @EnableAutoConfiguration ฉันจะได้รับ: [INFO] คำเตือน: metricFilter ที่ล้มเหลว: org.springframework.beans.factory.NoSuchBeanDefinitionException: ไม่มีถั่วที่ชื่อว่า 'metricFilter' ถูกกำหนด
ควาร์ก

นี่คือรหัสที่สมบูรณ์: bit.ly/1i53oAq
quarks

ในกรณีของฉันมันคือspring-boot-starter-data-jpa
Anand Rockzz

คำตอบ:


170

คุณไม่ได้ให้ฤดูใบไม้ผลิ Boot DataSourceมีข้อมูลมากพอที่จะอัตโนมัติกำหนดค่า ในการทำเช่นนั้นคุณจะต้องเพิ่มคุณสมบัติบางอย่างapplication.propertiesด้วยspring.datasourceคำนำหน้า ดูDataSourcePropertiesเพื่อดูคุณสมบัติทั้งหมดที่คุณสามารถตั้งค่าได้

คุณจะต้องระบุ URL และชื่อคลาสไดรเวอร์ที่เหมาะสม:

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

3
ไม่แน่ใจว่าจะใส่อะไรที่นี่ฉันใช้ DataNucleus + App Engine ของ Google
ควาร์ก

@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 แต่เมื่อฉันสร้างขวดและเรียกใช้โดยใช้java -jar myJar.jarมันทำให้ฉันมีข้อผิดพลาดเดียวกัน
Anas

1
สวัสดี @AndyWilkinson ฉันกำลังเผชิญกับข้อผิดพลาดเดียวกันกับรหัสคาสซานดราบูตฤดูใบไม้ผลิของฉัน มีฉันพยายามเชื่อมต่อกับคาสซานดรา และในการเชื่อมต่อคาสซานดราคุณไม่ได้ให้ 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

หากคุณต้องการใช้ฐานข้อมูล 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 - แน่นอนว่ามันจะไม่ได้! มันเป็นฐานข้อมูล "ในหน่วยความจำ"
672009

1
@ user672009 ไม่ถูกต้อง H2 ไม่ได้เป็นเพียงฐานข้อมูลในหน่วยความจำ ดูh2database.com/html/features.html จากที่กล่าวมานี่เป็นวิธีแก้ปัญหาที่ไม่ดี
Jason Nichols

5
ฉันกำลังพยายามสร้างแอพของใครบางคนและฉันได้รับข้อผิดพลาด "ไม่สามารถระบุ ... สำหรับประเภทฐานข้อมูลไม่มี" หลังจากลองวิธีแก้ปัญหาอื่นฉันลองอันนี้แล้วใช้งานได้ แอปถูกสร้างขึ้นมาเพื่อใช้สอง DB ที่กำหนดค่าโดยคุณสมบัติ ฉันกำหนดค่าพวกเขา แต่ได้รับข้อผิดพลาดนี้ หลังจากที่ฉันเพิ่มการอ้างอิง 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

สำหรับผมผมต้อง exluse HibernateJpaAutoConfiguration ยังอยู่ในเพื่อที่จะทำงาน: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
AbdelRahmane

20

ตอนนี้เมื่อฉันมองใกล้ ๆ ฉันคิดว่าปัญหา DataSource นั้นเป็นปลาเฮอริ่งแดง การกำหนดค่าอัตโนมัติของไฮเบอร์เนตของ Boot กำลังถูกเรียกใช้และนั่นคือสาเหตุที่ทำให้ต้องใช้แหล่งข้อมูล ไฮเบอร์เนตอยู่ใน classpath เพราะคุณมีการพึ่งพาspring-boot-starter-data-jpaซึ่งดึง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
ข้อผิดพลาดยังคงเหมือนเดิม :-(
ควาร์ก

คุณแน่ใจหรือว่าคุณใช้การยกเว้นอย่างถูกต้อง? การพึ่งพา mvn: ต้นไม้จะช่วยให้คุณตรวจสอบ ด้วยการยกเว้นในสถานที่ปัญหา DataSource หายไปสำหรับฉัน (ตอนนี้ฉันเห็น "Type demo.core.entity.Resource ไม่ได้เป็นประเภทการจัดการที่รู้จักกัน" แต่นั่นเป็นปัญหาที่แยกต่างหาก)
Andy Wilkinson

สวัสดีแอนดี้หมายความว่าคุณทดสอบโครงการจริงที่ฉันโพสต์หรือไม่ ดูสดใส
ควาร์ก

1
ใช่นั่นคือกับโครงการที่คุณโพสต์ การเปลี่ยนแปลงเดียวที่ฉันทำคือการเพิ่มการยกเว้นไฮเบอร์เนตตามที่อธิบายไว้ข้างต้น
Andy Wilkinson

เจ๋งดูเหมือนว่าสิ่งที่คุณรวบรวมไว้เป็นสาขาหลักหรือสาขา JPA
ควาร์ก

14

จากคู่มือฤดูใบไม้ผลิ

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>

สำหรับฉันแล้วการพึ่งพาสปริง-boot-starter-data-jpa และใช้การพึ่งพา spring-boot-starter-jdbc ทำงานเหมือนมีเสน่ห์ตราบใดที่ฉันมี h2 (หรือ hsqldb) รวมอยู่ในการพึ่งพา


9

Spring boot จะค้นหาคุณสมบัติ datasoure ในไฟล์ 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

หากคุณต้องการกำหนดค่าของคุณเองคุณสามารถตั้งค่าโปรไฟล์ของคุณเองและใช้ค่าแหล่งข้อมูลในขณะที่การสร้างถั่ว


7

ฉันไม่ได้ถ้ามันสายเกินไปที่จะตอบ ฉันสามารถแก้ปัญหานี้ได้โดยไม่รวม DataSourceAutoConfiguration จากการบูทสปริง


3
เอกสารเกี่ยวกับ exluding พบได้ที่นี่: docs.spring.io/spring-boot/docs/current/reference/html/...
ตัด

ไม่สายเกินไปสำหรับฉัน นี่เป็นวิธีที่ง่ายที่สุดในการแก้ไขปัญหาสำหรับโครงการของฉัน
เจฟฟ์ฝรั่งเศส

5

ฉันประสบกับข้อยกเว้นนี้ขณะที่ฉันกำลังทำ API สำหรับ ElasticSearch โดยใช้ Spring Data ฉันทำสิ่งต่อไปนี้และใช้งานได้

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

3

ฉันมีสองพึ่งพากับ groupId ของ org.springframework.data จากนั้นฉันก็ลบ 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พร้อมกับข้อความ "แอปพลิเคชันล้มเหลวในการเริ่มต้น" กลายเป็นว่าฉันไม่ได้เพิ่ม-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

ในกรณีของฉันฉันใส่ maven ไว้สำหรับ org.jasig.cas ใน pom ของฉันที่เรียกใช้การไฮเบอร์เนตและทำให้ Spring Boot ค้นหาแหล่งข้อมูลเพื่อกำหนดค่าการคงอยู่ของไฮเบอร์เนตโดยอัตโนมัติ ฉันแก้ไขได้โดยเพิ่ม com.h2database maven dependency ตามที่แนะนำโดย user672009 ขอบคุณเพื่อน!


1

เนื่องจากนี่เป็นหนึ่งในหัวข้อแรกที่ส่งคืนใน google สำหรับข้อผิดพลาดนี้ฉันจะโพสต์สิ่งที่ฉันทำในกรณีที่บางคนประสบปัญหาเดียวกัน .. ฉันไม่ต้องการยกเว้นDataSourceAutoConfigurationไม่ใช้ฐานข้อมูลหน่วยความจำ ..

ในกรณีของฉันฉันกำลังตั้งค่าพารามิเตอร์ตามที่คนอื่นพูด แต่application.propertiesไฟล์อยู่ในโฟลเดอร์ที่ไม่ถูกต้อง .. lol

ดังนั้นในกรณีที่ไม่มีอะไรเหมือนนี้ใช้งานได้ตรวจสอบว่าไฟล์อยู่ข้างในsrc/main/resources! ในกรณีของฉันมันอยู่ข้างในsrc/main/resources/static


1

คำตอบนั้นง่ายมาก SpringBoot จะค้นหาโปรแกรมควบคุมฐานข้อมูลแบบฝังตัวได้หากคุณไม่ได้กำหนดค่าใด ๆ ในรูปแบบของ XML หรือคำอธิบายประกอบมันจะส่งข้อยกเว้นนี้ออก ทำการเปลี่ยนแปลงคำอธิบายประกอบของคุณเช่นนี้

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
สิ่งนี้จะยกเว้น DataSourceAutoConfiguration และความสมบูรณ์แบบของ Simple 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

ทำงานด้านล่าง

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

แต่ถ้าฉันต้องการมีแหล่งข้อมูลฉันไม่ควรทำการกำหนดค่าข้างต้น ลิงค์ด้านล่างบอกว่าเราต้องการคุณสมบัติทั้งหมดในไฟล์ application.properties คุณสมบัติทั้งหมดควรเริ่มต้นด้วย spring.datasource.*

http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html


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-> ชื่อโครงการของฉัน

หลังจากนั้นฉันเรียกใช้โครงการและแก้ไขปัญหา

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 ได้ เมื่อฉันเพิ่มโฟลเดอร์“ src / main / resources” ในพา ธ การสร้าง Java มันทำงานได้

และคุณต้องเพิ่ม "@PropertySource ({" application.properties "})" ในคลาสแอปพลิเคชันของคุณ

ภาพหน้าจอ-1

ภาพหน้าจอ-2


ขอบคุณ! ฉันลองมาสี่ชั่วโมงแล้ว
Santiago Martí Olbrich

1

นี่คือวิธีที่ฉันแก้ไขปัญหานี้

ในกรณีของฉัน: ฉันต้องกำหนดค่าแหล่งข้อมูลสำหรับเซิร์ฟเวอร์ MySQL ซึ่งเป็นเซิร์ฟเวอร์ภายนอก

ดังที่เราทราบกันดีว่า Spring boot มีความสามารถในการกำหนดค่า DataSource สำหรับฐานข้อมูลแบบฝังโดยอัตโนมัติ

ดังนั้นฉันรู้ว่าฉันต้องปิดการใช้งานการกำหนดค่าอัตโนมัติของแหล่งข้อมูลเพื่อใช้การกำหนดค่าแบบกำหนดเองของฉัน

ดังที่หลายคนกล่าวไว้ฉันปิดใช้งานการกำหนดค่าแหล่งข้อมูลอัตโนมัติของ Spring Boot ที่ application.properties

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

ฉันกำหนดคุณสมบัติการกำหนดค่า hibernate ทั้งหมดในไฟล์แยกต่างหาก: hibernate-mysql.properties

จากนั้นฉันเขียนรหัสกำหนดค่าไฮเบอร์เนตแบบกำหนดเองของฉันในลักษณะต่อไปนี้และแก้ไขปัญหาได้

วิธีของฉันในการกำหนดค่าแหล่งข้อมูลที่ต้องการตามคุณสมบัติในไฟล์คุณสมบัติที่กำหนดเองและเติม LocalSessionFactoryBean ของคุณกับแหล่งข้อมูลของคุณและการกำหนดค่าไฮเบอร์เนตอื่น ๆ

Hibernate Custom Configuration Class: -
-------------------------------------------- -------------

กำหนดค่าเองไฮเบอร์เนต


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

โพสต์มีคำตอบเพียงพอแล้ว อย่างไรก็ตามฉันโพสต์สิ่งผิดพลาดที่ฉันทำและวิธีแก้ไขให้ถูกต้อง

ในกรณีของฉันฉันได้จัดทำโครงการของฉันpomแทนjar

pom.xml:

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

เปลี่ยนไปเป็น:

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

มันอาจเป็นประโยชน์สำหรับคนที่มีข้อผิดพลาดเดียวกัน


0

คุณสามารถดาวน์โหลด derby-10.10.1.1.jar จากMaven Repositoryและวางไว้ในโฟลเดอร์ WEB-INF / lib ของคุณเช่น Application / WEB-INF / lib / derby-10.10.1.1.jar AnnotationConfigEmbeddedWebApplicationContext ในตัวของคุณจะรับไดรเวอร์ฐานข้อมูลและเว็บเซิร์ฟเวอร์ของคุณจะเริ่มทำงานโดยไม่มีปัญหา :-)


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 ของฉันในไดเรกทอรีทรัพยากร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.