Spring Boot - Die eingebettete Datenbanktreiberklasse für den Datenbanktyp NONE kann nicht ermittelt werden


210

Dies ist der Fehler, der beim Versuch, meine Web-App auszuführen, ausgelöst wird:

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

Ich glaube, ich habe die richtige Kombination aus datanucleus-appengineund datanucleusGläsern:

2.1: Benötigt DataNucleus 3.1.x (Core, API-JDO, API-JPA, Enhancer). Benötigt SDK 1.6.4+ Beachten Sie, dass diese Version von Datanucleus vom DataNucleus-Projekt nicht mehr unterstützt wird

JPA App Config:

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

Ich frage mich, was in meiner App fehlen könnte. Ich habe die Anweisungen von hier aus unter Verwendung von Spring Data JPA in Google Appengine befolgt


Wenn ich die @ EnableAutoConfiguration auskommentiere, erhalte ich: [INFO] WARNUNG: Fehler metricFilter: org.springframework.beans.factory.NoSuchBeanDefinitionException: Es ist keine Bean mit dem Namen 'metricFilter' definiert
Quarks

Hier ist der vollständige Code: bit.ly/1i53oAq
Quarks

Antworten:


170

Sie haben Spring Boot nicht genügend Informationen zur automatischen Konfiguration von a bereitgestellt DataSource. Dazu müssen Sie einige Eigenschaften application.propertiesmit dem spring.datasourcePräfix hinzufügen . Sehen Sie sich DataSourceProperties an, um alle Eigenschaften anzuzeigen , die Sie festlegen können.

Sie müssen die entsprechende URL und den Namen der Treiberklasse angeben:

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

3
Ich bin mir nicht sicher, was ich hier einfügen soll. Ich verwende DataNucleus + Google App Engine
Quarks

@xybrek Fügen Sie einfach die Datei application.properties in Ihre Anwendung ein und fügen Sie die Datenquelleneigenschaften hinzu.
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 = xxx spring.datasource.driver-class-name = com.mysql.jdbc.Driver spring.jpa.database = mysql spring.jpa.database-platform = org.hibernate.dialect.MySQLDialect
swapyonubuntu

1
Ich habe das gleiche getan, der Code funktioniert gut, wenn ich die Anwendung in Intellij ausführe, aber wenn ich ein JAR erstelle und es damit ausführe, java -jar myJar.jargibt es mir den gleichen Fehler.
Anas

1
Hallo @AndyWilkinson, ich habe den gleichen Fehler mit meinem Spring Boot Cassandra Code. Dort versuche ich mich mit Cassandra zu verbinden. Und in der Cassandra-Konnektivität geben Sie keine spring.datasource.url = … spring.datasource.driver-class-name = …Eigenschaften an. Also habe ich @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})in meiner Hauptklasse hinzugefügt . Aber nachdem ich das jetzt gesagt habe, bekomme ich einen Fehler 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.. Bitte helfen Sie.
Kumarhimanshu449

113

Wenn Sie die eingebettete H2-Datenbank von Spring Boot Starter verwenden möchten, fügen Sie Ihrer POM-Datei die folgende Abhängigkeit hinzu.

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

Wie in den Kommentaren erwähnt, speichert die eingebettete H2-Datenbank Daten im Speicher und speichert sie nicht dauerhaft.


2
Ich hatte das gleiche Problem mit Spring-Boot-Starter-JDBC. Versuchte diesen Vorschlag und es hat mein Problem behoben.
Bluecollarcoder

3
Dies ist keine echte Lösung. Soweit mir bekannt ist, werden in H2 keine Daten dauerhaft gespeichert.
SARose

10
@SARose - Natürlich nicht! Es ist eine "In Memory" -Datenbank.
user672009

1
@ user672009, falsch. H2 ist nicht nur eine In-Memory-Datenbank. Siehe h2database.com/html/features.html . Dies ist jedoch eine schlechte Lösung für das Problem.
Jason Nichols

5
Ich versuche, eine App von jemandem zu erstellen, und erhalte den Fehler "Kann nicht bestimmen ... für Datenbanktyp NONE". Nachdem ich andere Lösungen ausprobiert habe, versuche ich diese und es funktioniert. Die App wurde für die Verwendung von zwei DBs erstellt, die durch Eigenschaften konfiguriert wurden. Ich habe sie konfiguriert, aber diesen Fehler erhalten. Nachdem ich die H2-Abhängigkeit hinzugefügt habe, keine Fehler mehr. Die App verwendet die anderen von mir angegebenen DBs. Nichts geht jemals an H2, AFAICT. Möglicherweise ein Nebeneffekt von Spring-Boot oder ein Problem im Design dieser App, erfordert jedoch H2, bevor sie gestartet wird. Da andere dieses Problem haben, kann es nicht nur diese App sein.
LS

87

Ich hatte das gleiche Problem und das Ausschließen der DataSourceAutoConfiguration löste das Problem.

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

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

3
Vielen Dank! könnte es application.propertiesspring.main.web-environment=false
konfigurieren

1
Ich fand @EnableAutoConfigurationin einer Nicht-SpringBootApplication-Klasse und musste dort auch den Ausschluss hinzufügen. TBH, ich brauche @EnableAutoConfigurationes wahrscheinlich überhaupt nicht : /
cs94njw

63

Das hat bei mir funktioniert (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 {

Schließen Sie beide Klassen aus.

Es hat nicht funktioniert mit

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

7
Dieser ist für Leute gedacht, die nicht verstehen, warum sie "auf mysteriöse Weise" Datenbankzugriff in ihrer Anwendung benötigen, wenn sie dies nicht sollten (z. B. wenn der Datenbankzugriff von einer anderen Anwendung verwaltet wird und dieser nur ein "Client" ist).
cst1992

31

Du kannst hinzufügen

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

zu Ihrer application.propertiesDatei.


2
Dies sollte die akzeptierte Antwort sein, wenn Sie keine JDBC-Datenquelle benötigen.
Farrukh Najmi

Dies ist besonders nützlich, wenn Sie mehrere Profile haben und eines davon im Arbeitsspeicher ist.
Doe Johnson

Für mich, ich brauchte HibernateJpaAutoConfiguration auch , um zur Arbeit exluse: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
AbdelRahmane

20

Jetzt, wo ich genauer hinschaue, denke ich, dass das DataSource-Problem ein roter Hering ist. Die automatische Konfiguration des Ruhezustands von Boot wird ausgelöst, weshalb eine DataSource erforderlich ist. Der Ruhezustand befindet sich auf dem Klassenpfad, da Sie eine Abhängigkeit haben, von spring-boot-starter-data-jpader Sie profitieren hibernate-entitymanager.

Aktualisieren Sie Ihre spring-boot-starter-data-jpaAbhängigkeit, um den Ruhezustand auszuschließen:

<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
Fehler immer noch der gleiche :-(
Quarks

Sind Sie sicher, dass Sie den Ausschluss ordnungsgemäß angewendet haben? MVN-Abhängigkeit: Baum hilft Ihnen bei der Überprüfung. Mit dem Ausschluss ist das DataSource-Problem für mich weg (ich sehe jetzt "Typ demo.core.entity.Resource ist kein bekannter verwalteter Typ", aber das ist ein separates Problem)
Andy Wilkinson

Hallo Andy, heißt das, dass du das aktuelle Projekt getestet hast, das ich gepostet habe? sieht vielversprechend aus
Quarks

1
Ja, das war mit dem Projekt, das Sie gepostet haben. Die einzige Änderung, die ich vorgenommen habe, war das Hinzufügen des Ausschlusses für den Ruhezustand wie oben beschrieben.
Andy Wilkinson

Cool, es scheint, dass Sie den Master-Zweig oder den JPA-Zweig kompiliert haben?
Quarks

14

Aus dem Federhandbuch .

Spring Boot kann eingebettete H2-, HSQL- und Derby-Datenbanken automatisch konfigurieren. Sie müssen keine Verbindungs-URLs angeben. Fügen Sie einfach eine Build-Abhängigkeit zu der eingebetteten Datenbank hinzu, die Sie verwenden möchten.

Typische POM-Abhängigkeiten wären beispielsweise:

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

Für mich war es wie ein Zauber, die Spring-Boot-Starter-Daten-JPA-Abhängigkeit wegzulassen und nur die Spring-Boot-Starter-JDBC-Abhängigkeit zu verwenden, solange ich h2 (oder hsqldb) als Abhängigkeiten eingeschlossen hatte.


9

Spring Boot sucht in der Datei application.properties nach Datenquelleneigenschaften.

Bitte definieren Sie es in der Datei application.properties oder in der Datei yml

application.properties

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

Wenn Sie eine eigene Konfiguration benötigen, können Sie Ihr eigenes Profil festlegen und die Datenquellenwerte während der Bean-Erstellung verwenden.



5

Ich war mit dieser Ausnahme konfrontiert, als ich APIs für ElasticSearch mit Spring Data ausführte. Ich habe folgendes getan und es hat funktioniert.

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

3

Ich hatte zwei Abhängigkeiten mit groupId von org.springframework.data, dann entfernte ich jpa und behielt nur mongodb, und es funktionierte!

<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

Ich löse mein Problem, indem ich nur @AutoConfigureTestDatabase hinzufüge (replace = Replace.NONE)

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

}

2

Ich habe die Fehlermeldung im Titel o.s.b.d.LoggingFailureAnalysisReporterzusammen mit der Meldung "APPLICATION FAILED TO START" erhalten. Es stellte sich heraus, dass ich -Dspring.profiles.active=devmeine Eclipse-Debug-Konfiguration nicht erweitert hatte , sodass ich kein aktives Profil hatte.


1
Genau mein Problem auch. Hinzufügen des Flags zu den VM-Argumenten der Debug-Konfiguration ( Run -> Debug configurations... -> Maven build -> [build name] -> JRE -> VM arguments)
sshow

2

Auch ich stand vor dem gleichen Problem.

Cannot determine embedded database driver class for database type NONE.

In meinem Fall behebt das Löschen der JAR-Datei aus dem Repository, das der Datenbank entspricht, das Problem. Im Repository war ein beschädigtes Glas vorhanden, das das Problem verursachte.


1

In meinem Fall habe ich eine Maven-Abhängigkeit für org.jasig.cas in meinen POM eingefügt, die eine Ruhezustandsabhängigkeit ausgelöst hat und Spring Boot veranlasst hat, nach einer Datenquelle zu suchen, um die Ruhezustandspersistenz automatisch zu konfigurieren. Ich habe es gelöst, indem ich die Maven-Abhängigkeit von com.h2database hinzugefügt habe, wie von user672009 vorgeschlagen. Danke Leute!


1

Da dies eines der ersten Themen ist, die in Google für diesen Fehler zurückgegeben werden, werde ich veröffentlichen, was ich getan habe, falls jemand das gleiche Problem hat. Ich wollte DataSourceAutoConfigurationweder ausschließen noch eine Speicherdatenbank verwenden.

In meinem Fall habe ich die Parameter wie in den anderen Antworten angegeben, aber die application.propertiesDatei befand sich im falschen Ordner. Lol

Falls nichts dergleichen funktioniert, überprüfen Sie, ob sich die Datei darin befindet src/main/resources! In meinem Fall war es drinnensrc/main/resources/static


1

Die Antwort ist sehr einfach. SpringBoot sucht nach einem eingebetteten Datenbanktreiber. Wenn Sie in keiner Ihrer Konfigurationen in Form von XML oder Anmerkungen konfiguriert haben, wird diese Ausnahme ausgelöst. Nehmen Sie die Änderungen in Ihrer Anmerkung wie folgt vor

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
Dadurch wird die DataSourceAutoConfiguration ausgeschlossen. Und die Vervollständigung von Perfect Simple Coding würde funktionieren, wenn Sie Ihre Klasse richtig konfiguriert haben.

    @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

Wenn Sie "Spring-Boot-Starter-Data-JPA" wirklich als Projektabhängigkeit benötigen und gleichzeitig nicht zulassen möchten, dass Ihre App auf eine Datenbank zugreift, können Sie einfach automatische Konfigurationsklassen ausschließen

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

1

Ich habe alle oben genannten Dinge ausprobiert, konnte das Problem jedoch nicht beheben. Ich verwende SQLite und meine SQLite-Datei befand sich im Ressourcenverzeichnis.

a) Einrichtung für IDE durchgeführt

Ich muss die folgenden Zeilen manuell in die .classpath-Datei meines Projekts einfügen.

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

Danach habe ich das Projekt von MenuBar oben aktualisiert und bereinigt. wie Projekt-> Reinigen-> Mein Projektname.

Danach führe ich das Projekt aus und das Problem wurde behoben.

application.properties für mein Projekt ist

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) Einrichtung abgeschlossen, wenn die Jar-Bereitstellung denselben Fehler auslöst

Sie müssen Ihrer pom.xml folgende Zeilen hinzufügen

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

Vielleicht hilft es jemandem.


1

Wenn Ihre Anwendung keine Datenbank enthält, deaktivieren Sie einfach die automatische Konfiguration der Datenquelle, indem Sie die folgenden Anmerkungen hinzufügen.

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

1

Das gleiche gilt für @Anas. Ich kann es in Eclipse ausführen, aber wenn ich "java -jar ..." verwende, wird es ausgeführt, und es gibt mir diesen Fehler. Dann finde ich, dass mein Java-Erstellungspfad falsch ist und der Ordner "src / main / resources" fehlt, sodass die Anwendung application.properties nicht finden kann. Wenn ich den Ordner "src / main / resources" im Java-Erstellungspfad hinzufüge, hat es funktioniert.

Außerdem müssen Sie Ihrer Anwendungsklasse "@PropertySource ({" application.properties "})" hinzufügen.

Screenshot-1

Screenshot-2


Vielen Dank! Ich habe vier Stunden versucht
Santiago Martí Olbrich

1

So habe ich dieses Problem gelöst.

In meinem Fall: Ich musste die Datenquelle für MySQL Server konfigurieren, bei dem es sich um einen externen Server handelte.

Wie wir alle wissen, kann Spring Boot DataSource für eingebettete Datenbanken automatisch konfigurieren.

Daher wurde mir klar, dass ich die automatische Konfiguration der Datenquelle deaktivieren musste, um meine benutzerdefinierte Konfiguration verwenden zu können.

Wie oben von vielen erwähnt, habe ich die automatische DataSource-Konfiguration von Spring Boot unter application.properties deaktiviert

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

Ich habe alle Konfigurationseigenschaften für den Ruhezustand in einer separaten Datei definiert: hibernate-mysql.properties

Dann habe ich meine eigene benutzerdefinierte Ruhezustandskonfiguration folgendermaßen codiert und das Problem behoben.

Meine Methode zum Konfigurieren der gewünschten DataSource basierend auf Eigenschaften in einer benutzerdefinierten Eigenschaftendatei und zum Auffüllen Ihrer LocalSessionFactoryBean mit Ihrer Datenquelle und einer anderen Konfiguration im Ruhezustand.

Benutzerdefinierte Konfigurationsklasse für den Ruhezustand: -
---------------------------------------- -------------

Benutzerdefinierte Konfiguration im Ruhezustand


1

Verwenden Sie dies unter Abhängigkeit.

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

Ich brauchte keine Datenbank und bekam diesen Fehler. Ich habe das hinzugefügt und es hat es behoben.
Märzhegrea

1

In meinem Fall wird mit IDEA nach dem Entfernen des outVerzeichnisses alles wieder normal. Ich weiß nur nicht warum, aber es hat geklappt.


1

Ich hatte das ähnliche Problem und das Ausschließen von DataSourceAutoConfiguration und HibernateJpaAutoConfiguration löste das Problem.

Ich habe diese beiden Zeilen in meine Datei application.properties eingefügt und es hat funktioniert.

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

1

Es wurden bereits genügend Antworten veröffentlicht. Ich poste jedoch, welchen Fehler ich gemacht habe und wie ich ihn korrigiert habe.

In meinem Fall hatte ich mein Projekt als pomstatt verpacktjar

pom.xml:

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

Gewechselt zu:

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

Es kann für jemanden mit dem gleichen Fehler hilfreich sein.


0

Sie können das Derby-10.10.1.1.jar aus dem Maven-Repository herunterladen und in Ihrem Ordner WEB-INF / lib ablegen, wie in dieser Anwendung / WEB-INF / lib / derby-10.10.1.1.jar. Ihr eingebetteter AnnotationConfigEmbeddedWebApplicationContext nimmt den Datenbanktreiber auf und Ihr Webserver wird ohne Probleme ausgeführt :-)


0

Wenn Sie Gradle verwenden, fügen Sie das rechte Treiberglas wie folgt hinzu:

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

Oder wenn Sie Maven dann im Maven-Stil verwenden, sollte es Ihr Problem lösen.


0

Für jeden, der zu diesem Thread kommt, nachdem er stundenlang mit dem Kopf gegen eine Wand geschlagen hat. Ich habe diesen Fehler durch Ändern behoben

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

zu

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

in meiner Datei schema.sql im Ressourcenverzeichnis.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.