Spring Boot - Tidak dapat menentukan kelas driver basis data tertanam untuk tipe basis data NONE

210

Ini adalah kesalahan yang dilemparkan ketika mencoba menjalankan aplikasi web saya:

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

Saya yakin saya memiliki kombinasi datanucleus-appenginedan datanucleustoples yang tepat:

2.1: Memerlukan DataNucleus 3.1.x (inti, api-jdo, api-jpa, penambah). Membutuhkan SDK 1.6.4+ Perhatikan bahwa rilis Datanucleus ini tidak lagi didukung oleh proyek DataNucleus

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

Saya bertanya-tanya apa yang bisa hilang di aplikasi saya? Saya mengikuti instruksi dari sini Menggunakan Spring Data JPA di Google Appengine

quark
sumber
Jika saya mengomentari @EnableAutoConfiguration saya mendapatkan: [INFO] PERINGATAN: gagal metricFilter: org.springframework.beans.factory.NoSuchBeanDefinitionException: Tidak ada kacang bernama 'metricFilter' didefinisikan
quark
Berikut ini adalah kode lengkapnya: bit.ly/1i53oAq
quark
Dalam kasus saya itu adalah spring-boot-starter-data-jpa
Anand Rockzz

Jawaban:

170

Anda belum memberikan Spring Boot informasi yang cukup untuk mengonfigurasi a DataSource. Untuk melakukannya, Anda harus menambahkan beberapa properti application.propertiesdengan spring.datasourceawalan. Lihatlah DataSourceProperties untuk melihat semua properti yang bisa Anda atur.

Anda harus memberikan url dan nama kelas driver yang sesuai:

spring.datasource.url = 
spring.datasource.driver-class-name = 
Andy Wilkinson
sumber
3
tidak yakin apa yang harus dimasukkan di sini saya menggunakan DataNucleus + Google App Engine
quark
@xybrek Cukup tambahkan file application.properties di aplikasi Anda dan tambahkan properti sumber data di dalamnya.
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
Saya melakukan hal yang sama, kode berfungsi dengan baik ketika saya menjalankan aplikasi di intellij tetapi ketika saya membuat botol dan menjalankannya menggunakan java -jar myJar.jaritu memberi saya kesalahan yang sama.
Anas
1
Hai @AndyWilkinson Saya menghadapi kesalahan yang sama dengan kode cassandra booting pegas saya. Di sana saya mencoba terhubung ke cassandra. Dan dalam konektivitas cassandra Anda tidak memberikan spring.datasource.url = … spring.datasource.driver-class-name = …properti. Jadi saya menambahkan @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})di kelas utama saya. Tetapi setelah meletakkan ini sekarang saya mendapatkan kesalahan 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.. Tolong bantu.
kumarhimanshu449
113

Jika Anda ingin menggunakan database H2 tertanam dari boot Spring Boot tambahkan ketergantungan di bawah ini ke file pom Anda.

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

Tetapi seperti yang disebutkan dalam komentar, database H2 yang tertanam menyimpan data dalam memori dan tidak menyimpannya secara permanen.

pengguna672009
sumber
2
Saya mengalami masalah yang sama dengan spring-boot-starter-jdbc. Mencoba saran ini dan itu memperbaiki masalah saya.
bluecollarcoder
3
Ini bukan solusi nyata. H2 tidak akan menyimpan data secara permanen sejauh yang saya ketahui.
SARose
10
@ Santosa - Tentu saja tidak! Ini adalah database "dalam memori".
user672009
1
@ user672009, salah. H2 tidak hanya dalam database memori. Lihat h2database.com/html/features.html . Dengan itu, ini adalah solusi yang buruk untuk masalah ini.
Jason Nichols
5
Saya mencoba membuat aplikasi seseorang dan saya mendapatkan kesalahan "Tidak dapat menentukan ... untuk tipe database NONE". Setelah mencoba solusi lain, saya coba yang ini dan berhasil. Aplikasi dibuat untuk menggunakan dua DB, yang dikonfigurasi oleh properti. Saya mengkonfigurasi mereka, tetapi mendapat kesalahan ini. Setelah saya menambahkan ketergantungan H2, tidak ada lagi kesalahan. Aplikasi ini menggunakan DB lain yang saya tentukan, tidak ada yang pergi ke H2, AFAICT. Mungkin ada efek samping dari pegas-boot atau masalah dalam desain aplikasi ini, tetapi itu membutuhkan H2 sebelum akan dimulai. Karena orang lain memiliki masalah ini, tidak mungkin hanya aplikasi ini.
LS
87

Saya mengalami masalah yang sama dan tidak termasuk DataSourceAutoConfiguration memecahkan masalah.

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

    public static void main(String[] args) {
        SpringApplication.run(RecommendationEngineWithCassandraApplication.class, args);
    }
}
Adelin
sumber
3
Terima kasih! bisa application.propertiesspring.main.web-environment=false
mengonfigurasinya
1
Saya menemukan @EnableAutoConfigurationdi kelas non-SpringBootApplication, dan harus menambahkan pengecualian di sana juga. TBH, saya mungkin tidak perlu @EnableAutoConfigurationada di tempat pertama: /
cs94njw
63

Ini bekerja untuk saya (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 {

Kecualikan kedua kelas.

Itu tidak bekerja dengan

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
Aliopi
sumber
7
Yang ini untuk orang-orang yang tidak mengerti mengapa mereka 'secara misterius' memerlukan akses database di aplikasi mereka padahal seharusnya tidak (misalnya ketika akses database sedang ditangani oleh beberapa aplikasi lain dan yang ini hanya 'klien').
cst1992
31

Anda dapat menambahkan

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

ke application.propertiesfile Anda .

Redoff
sumber
2
Ini harus menjadi jawaban yang diterima jika Anda tidak memerlukan sumber data jdbc.
Farrukh Najmi
Ini sangat berguna ketika Anda memiliki banyak profil dan salah satunya di dalam memori.
Doe Johnson
Bagi saya, saya perlu exluse HibernateJpaAutoConfiguration juga dalam rangka kerja: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
AbdelRahmane
20

Sekarang saya melihat lebih dekat, saya pikir masalah DataSource adalah ikan merah. Konfigurasi otomatis Boot Hibernate sedang dipicu dan itulah yang menyebabkan DataSource diperlukan. Hibernate ada di classpath karena Anda punya ketergantungan spring-boot-starter-data-jpayang menarik hibernate-entitymanager.

Perbarui spring-boot-starter-data-jpaketergantungan Anda untuk mengecualikan 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>
Andy Wilkinson
sumber
1
Kesalahan masih sama :-(
quark
Apakah Anda yakin telah menerapkan pengecualian dengan benar? mvn dependensi: tree akan membantu Anda memeriksa. Dengan pengecualian di tempat masalah DataSource hilang untuk saya (sekarang saya melihat "Ketik demo.core.entity.Resource bukan tipe terkelola yang dikenal", tapi itu masalah terpisah)
Andy Wilkinson
Hai Andy apakah itu berarti Anda menguji proyek yang sebenarnya saya posting? terlihat menjanjikan
quark
1
Ya, itu dengan proyek yang Anda posting. Satu-satunya perubahan yang saya lakukan adalah menambahkan pengecualian Hibernate seperti dijelaskan di atas.
Andy Wilkinson
Keren, sepertinya yang Anda kompilasi adalah cabang master, atau cabang JPA?
quark
14

Dari manual Spring .

Spring Boot dapat mengkonfigurasi secara otomatis database H2, HSQL, dan Derby yang disematkan. Anda tidak perlu memberikan URL koneksi apa pun, cukup sertakan dependensi build ke database tertanam yang ingin Anda gunakan.

Misalnya, dependensi POM tipikal adalah:

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

Bagi saya meninggalkan dependensi spring-boot-starter-data-jpa dan hanya menggunakan dependensi spring-boot-starter-jdbc bekerja seperti pesona, selama saya memiliki h2 (atau hsqldb) dimasukkan sebagai dependensi.

Arturo Araya
sumber
9

Spring boot akan mencari properti data Anda di file application.properties.

Silakan tentukan di application.properties atau file yml

properti aplikasi

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

Jika Anda membutuhkan konfigurasi Anda sendiri, Anda dapat mengatur profil Anda sendiri dan menggunakan nilai sumber data saat membuat bean.

Vino
sumber
7

Saya tidak tahu kalau sudah terlambat untuk menjawab. Saya bisa mengatasi masalah ini dengan mengecualikan DataSourceAutoConfiguration dari spring boot.

bcsshdha
sumber
3
Dokumentasi exluding ditemukan di sini: docs.spring.io/spring-boot/docs/current/reference/html/...
dicukur
Belum terlambat untukku. Ini adalah cara paling sederhana untuk mengatasi masalah untuk proyek saya.
Jeff French
5

Saya menghadapi pengecualian ini ketika saya sedang melakukan API untuk ElasticSearch menggunakan Spring Data. Saya melakukan yang berikut dan berhasil.

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

Saya memiliki dua dependensi dengan groupId dari org.springframework.data, kemudian saya menghapus jpa dan menyimpan mongodb saja, dan itu berhasil!

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
</dependency>
xiaofeig
sumber
2

Saya memecahkan masalah saya hanya dengan menambahkan @AutoConfigureTestDatabase (ganti = Ganti.NONE)

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

}
Virmerson
sumber
2

Saya mendapat pesan kesalahan dalam judul dari o.s.b.d.LoggingFailureAnalysisReporterbersama dengan pesan "APLIKASI GAGAL UNTUK MULAI". Ternyata saya belum menambahkan -Dspring.profiles.active=devke konfigurasi debug Eclipse saya jadi saya tidak punya profil aktif.

Noumenon
sumber
1
Persis juga masalah saya. Menambahkan bendera ke argumen VM dari konfigurasi debug ( Run -> Debug configurations... -> Maven build -> [build name] -> JRE -> VM arguments)
sshow
2

Saya juga menghadapi masalah yang sama.

Cannot determine embedded database driver class for database type NONE.

Dalam kasus saya, menghapus file jar dari repositori yang sesuai dengan database memperbaiki masalah. Ada jar rusak hadir di repositori yang menyebabkan masalah.

naresh goyal
sumber
1

Dalam kasus saya, saya meletakkan ketergantungan maven untuk org.jasig.cas di pom saya yang memicu ketergantungan hibernate dan yang menyebabkan Spring Boot mencari sumber data untuk mengkonfigurasi secara otomatis hibernate persistence. Saya memecahkannya dengan menambahkan ketergantungan maven com.h2database seperti yang disarankan oleh user672009. Terima kasih kawan!

pengguna3796391
sumber
1

Karena ini adalah salah satu topik pertama yang dikembalikan di google untuk kesalahan ini, saya akan memposting apa yang saya lakukan jika seseorang menghadapi masalah yang sama .. Saya tidak ingin mengecualikan DataSourceAutoConfiguration tidak menggunakan database memori ..

Dalam kasus saya, saya menetapkan parameter sebagai repliers lain katakan tetapi application.properties file itu di dalam folder yang salah .. lol

Jadi jika hal seperti ini tidak berfungsi, periksa apakah file ada di dalam src/main/resources! Dalam kasus saya itu ada di dalamsrc/main/resources/static

Felipe S.
sumber
1

Jawabannya sangat sederhana, SpringBoot akan mencari driver basis data Embeddable, Jika Anda tidak mengonfigurasi dalam konfigurasi Anda dalam bentuk XML atau Anotasi, itu akan melempar pengecualian ini. Buat perubahan dalam anotasi Anda seperti ini

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
ini akan mengecualikan DataSourceAutoConfiguration. Dan penyelesaian Coding Perfect Simple akan berfungsi jika Anda telah mengkonfigurasi kelas Anda dengan benar.

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

Praveen Kumar KS
sumber
1

Melakukan di bawah ini berfungsi.

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

Tetapi jika saya ingin memiliki dataSource, saya tidak boleh melakukan konfigurasi di atas. Tautan di bawah ini mengatakan bahwa kita perlu semua properti di file application.properties. Semua properti harus dimulai dengan spring.datasource.*

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

Anil
sumber
1

Jika Anda benar-benar membutuhkan "spring-boot-starter-data-jpa" sebagai ketergantungan proyek Anda dan pada saat yang sama Anda tidak ingin mengizinkan aplikasi Anda mengakses basis data apa pun, Anda cukup mengecualikan kelas konfigurasi otomatis

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
Karol Król
sumber
1

Saya mencoba semua hal yang disebutkan di atas tetapi tidak dapat menyelesaikan masalah. Saya menggunakan SQLite dan file SQLite saya ada di direktori resources.

a) Pengaturan dilakukan untuk IDE

Saya perlu secara manual menambahkan baris di bawah ini dalam file .classpath proyek saya

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

Setelah itu, saya menyegarkan dan membersihkan proyek dari MenuBar di bagian atas. seperti Project-> Clean-> Nama Proyek Saya.

Setelah itu, saya menjalankan proyek dan masalah teratasi.

application.properties untuk proyek saya adalah

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) Pengaturan dilakukan jika penyebaran Jar menimbulkan kesalahan yang sama

Anda perlu menambahkan baris berikut ke pom.xml Anda

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

Mungkin itu bisa membantu seseorang.

Bagesh Sharma
sumber
1

jika Anda tidak memiliki basis data dalam aplikasi Anda, cukup nonaktifkan konfigurasi-otomatis sumber data dengan menambahkan anotasi di bawah ini.

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
Sharma Prashant
sumber
1

Sama dengan @Anas. Saya dapat menjalankannya di Eclipse, tetapi ketika saya menggunakan "java -jar ..." jalankan, itu memberi saya kesalahan ini. Kemudian saya menemukan path build java saya salah, ia kehilangan folder "src / main / resources", jadi, aplikasi tidak dapat menemukan application.properties. Ketika saya menambahkan folder “src / main / resources” di java build path, itu berhasil.

Dan, Anda perlu menambahkan "@PropertySource ({" application.properties "})" di kelas Aplikasi Anda.

Tangkapan layar-1

Tangkapan layar-2

谢兆鑫
sumber
Terima kasih! Saya sudah mencoba empat jam
Santiago Martí Olbrich
1

Inilah cara saya mengatasi masalah ini.

Dalam kasus saya: Saya harus mengkonfigurasi sumber data untuk MySQL Server, yang merupakan Server eksternal.

Seperti yang kita semua tahu, boot Spring memiliki kemampuan untuk mengkonfigurasi DataSource secara otomatis untuk database tertanam.

Jadi, saya menyadari bahwa saya harus menonaktifkan konfigurasi otomatis sumber data agar dapat menggunakan konfigurasi khusus saya.

Seperti yang disebutkan di atas oleh banyak orang, saya menonaktifkan konfigurasi DataSource Otomatis dari Spring Boot di application.properties

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

Saya mendefinisikan semua properti konfigurasi hibernasi dalam file terpisah: hibernate-mysql.properties

Kemudian, saya mengkodekan Konfigurasi Hibernate Kustom saya sendiri dengan cara berikut dan itu menyelesaikan masalah.

Cara saya untuk mengonfigurasi DataSource yang diinginkan berdasarkan properti di file properti khusus dan mengisi LocalSessionFactoryBean Anda dengan sumber data Anda dan konfigurasi hibernasi lainnya.

Kelas Konfigurasi Kustom Hibernasi: -
-------------------------------------------- -------------

Konfigurasi Kustom Hibernasi

Philip Dilip
sumber
1

Gunakan dependensi di bawah ini.

<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
   <scope>runtime</scope>
</dependency>
Lova Chittumuri
sumber
Saya tidak membutuhkan database dan mendapatkan kesalahan ini. Saya menambahkan ini dan memperbaikinya.
markthegrea
1

Dalam kasus saya, menggunakan IDEA, setelah menghapus outdirektori, maka semuanya kembali normal. Saya hanya tidak tahu mengapa, tetapi itu berhasil.

Leo Lee
sumber
1

Saya mengalami masalah yang sama dan tidak termasuk DataSourceAutoConfiguration dan HibernateJpaAutoConfiguration memecahkan masalah.

Saya telah menambahkan dua baris ini di file application.properties saya dan berhasil.

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

Sudah cukup banyak jawaban yang diposting. Namun, saya memposting kesalahan apa yang saya lakukan dan bagaimana saya memperbaikinya.

Dalam kasus saya, saya telah mengemas proyek saya sebagai pomgantinyajar

pom.xml:

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

Diubah menjadi:

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

Mungkin bermanfaat bagi seseorang dengan kesalahan yang sama.

Sangeeth
sumber
0

Anda dapat mengunduh derby-10.10.1.1.jar dari Repositori Maven dan meletakkannya di folder WEB-INF / lib Anda, seperti Aplikasi ini / WEB-INF / lib / derby-10.10.1.1.jar. AnnotationConfigEmbeddedWebApplicationContext Anda yang tertanam akan mengambil driver database dan server web Anda akan mulai berjalan tanpa masalah :-)

Praveen Kumar KS
sumber
0

Jika Anda menggunakan Gradle, sertakan toples driver yang benar seperti di bawah ini:

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

Atau jika menggunakan Maven maka lakukan dengan gaya Maven, itu harus menyelesaikan masalah Anda.

RWork
sumber
0

Kepada siapa pun yang datang ke utas ini setelah beberapa jam membenturkan kepala ke dinding. Saya memecahkan kesalahan ini dengan mengubah

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

untuk

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

dalam file schema.sql saya di direktori resources.

decapo
sumber