Spring Boot: impossibile determinare la classe del driver del database incorporato per il tipo di database NONE


210

Questo è l'errore che viene generato quando si tenta di eseguire la mia app Web:

[INFO] WARNING: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.:
    [INFO] org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.
    [INFO]  at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.getDriverClassName(DataSourceProperties.java:91)
    [INFO]  at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource(DataSourceAutoConfiguration.java:100)
    [INFO]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [INFO]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    [INFO]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [INFO]  at java.lang.reflect.Method.invoke(Method.java:606)
    [INFO]  at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
    [INFO]  at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)
    [INFO]  at org.springframework.beans.factory.support.ConstructorResolver$3.run(ConstructorResolver.java:580)
    [INFO]  at java.security.AccessController.doPrivileged(Native Method)
    [INFO]  at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:577)
    [INFO]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094)
    [INFO]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989)
    [INFO]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    [INFO]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    [INFO]  at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    [INFO]  at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    [INFO]  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    [INFO]  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    [INFO]  at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017)
    [INFO]  at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960)
    [INFO]  at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858)
    [INFO]  at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
    [INFO]  at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    [INFO]  at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
    [INFO]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
    [INFO]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    [INFO]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    [INFO]  at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    [INFO]  at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    [INFO]  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    [INFO]  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    [INFO]  at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:370)
    [INFO]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094)
    [INFO]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989)
    [INFO]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    [INFO]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    [INFO]  at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    [INFO]  at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    [INFO]  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    [INFO]  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    [INFO]  at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
    [INFO]  at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750)
    [INFO]  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    [INFO]  at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:683)
    [INFO]  at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
    [INFO]  at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:142)
    [INFO]  at org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener.initWebApplicationContext(SpringBootContextLoaderListener.java:60)
    [INFO]  at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    [INFO]  at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
    [INFO]  at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
    [INFO]  at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    [INFO]  at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    [INFO]  at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    [INFO]  at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    [INFO]  at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    [INFO]  at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    [INFO]  at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    [INFO]  at org.mortbay.jetty.Server.doStart(Server.java:224)
    [INFO]  at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    [INFO]  at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:249)
    [INFO]  at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:306)
    [INFO]  at com.google.appengine.tools.development.AutomaticInstanceHolder.startUp(AutomaticInstanceHolder.java:26)
    [INFO]  at com.google.appengine.tools.development.AbstractModule.startup(AbstractModule.java:79)
    [INFO]  at com.google.appengine.tools.development.Modules.startup(Modules.java:88)
    [INFO]  at com.google.appengine.tools.development.DevAppServerImpl.doStart(DevAppServerImpl.java:254)
    [INFO]  at com.google.appengine.tools.development.DevAppServerImpl.access$000(DevAppServerImpl.java:47)
    [INFO]  at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:212)
    [INFO]  at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:210)
    [INFO]  at java.security.AccessController.doPrivileged(Native Method)
    [INFO]  at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:210)
    [INFO]  at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:277)
    [INFO]  at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
    [INFO]  at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:219)
    [INFO]  at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:210)

Credo di avere la giusta combinazione di datanucleus-appenginee datanucleusvasetti:

2.1: Richiede DataNucleus 3.1.x (core, api-jdo, api-jpa, potenziatore). Richiede SDK 1.6.4+. Notare che questa versione di Datanucleus non è più supportata dal progetto DataNucleus

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

Mi chiedo cosa potrebbe mancare nella mia app? Ho seguito le istruzioni da qui Utilizzo di Spring Data JPA su Google Appengine


Se commento @EnableAutoConfiguration ottengo: [INFO] ATTENZIONE: metricFilter fallito: org.springframework.beans.factory.NoSuchBeanDefinitionException: nessun bean chiamato 'metricFilter' è definito
quark

Ecco il codice completo: bit.ly/1i53oAq
quark

Risposte:


170

Non hai fornito a Spring Boot informazioni sufficienti per la configurazione automatica di a DataSource. Per fare ciò, dovrai aggiungere alcune proprietà application.propertiescon il spring.datasourceprefisso. Dai un'occhiata a DataSourceProperties per vedere tutte le proprietà che puoi impostare.

Dovrai fornire l'URL e il nome della classe conducente appropriati:

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

3
non sono sicuro di cosa mettere qui sto usando DataNucleus + Google App Engine
quark

@xybrek Basta aggiungere il file application.properties nell'applicazione e aggiungere le proprietà dell'origine dati in esso.
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
Ho fatto lo stesso, il codice funziona benissimo quando eseguo l'applicazione in Intellij ma quando creo un jar ed eseguo usando java -jar myJar.jaresso mi dà lo stesso errore.
Anas,

1
Ciao @AndyWilkinson Sto affrontando lo stesso errore con il mio codice cassandra di avvio a molla. Lì sto cercando di connettermi a Cassandra. E nella connettività cassandra non si danno spring.datasource.url = … spring.datasource.driver-class-name = …proprietà. Quindi ho aggiunto @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})nella mia classe principale. Ma dopo averlo messo ora sto ricevendo un errore 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.. Per favore aiuto.
kumarhimanshu449,

113

Se si desidera utilizzare il database H2 incorporato dall'avviatore Spring Boot, aggiungere la dipendenza seguente al file pom.

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

Ma come menzionato nei commenti, il database H2 incorporato mantiene i dati in memoria e non li memorizza in modo permanente.


2
Stavo avendo lo stesso problema con spring-boot-starter-jdbc. Ho provato questo suggerimento e risolto il mio problema.
bluecollarcoder,

3
Questa non è una vera soluzione. H2 non salverà permanentemente i dati per quanto ne so.
SARose,

10
@SARose - Certo che no! È un database "in memoria".
user672009

1
@ user672009, errato. H2 non è solo un database in memoria. Vedi h2database.com/html/features.html . Detto questo, questa è una cattiva soluzione al problema.
Jason Nichols il

5
Sto cercando di creare l'app di qualcuno e ottengo questo errore "Impossibile determinare ... per il tipo di database NESSUNO". Dopo aver provato altre soluzioni, provo questo e funziona. L'app è stata creata per utilizzare due DB, configurati per proprietà. Li ho configurati, ma ho riscontrato questo errore. Dopo aver aggiunto la dipendenza H2, non più errori. L'app utilizza gli altri DB che ho specificato, nulla va mai a H2, AFAICT. Può essere un effetto collaterale dell'avvio a molla o un problema nella progettazione di questa app, ma richiede H2 prima che inizi. Poiché altri hanno questo problema, non può essere solo questa app.
LS

87

Avrei lo stesso problema ed escludendo DataSourceAutoConfiguration ho risolto il problema.

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

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

3
Grazie! potrebbe configurarlo application.properties, comespring.main.web-environment=false
zhuguowei,

1
Ho trovato @EnableAutoConfigurationin una classe non SpringBootApplication e ho dovuto aggiungere anche l'esclusione lì. TBH, probabilmente non ho bisogno @EnableAutoConfigurationlì in primo luogo: /
cs94njw

63

Questo ha funzionato per me (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 {

Escludere entrambe le classi.

Non ha funzionato con

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

7
Questo è per le persone che non capiscono perché "misteriosamente" richiedono l'accesso al database nella loro applicazione quando non dovrebbero (ad esempio quando l'accesso al database è gestito da un'altra applicazione e questo è solo un "client").
cst1992,

31

Puoi aggiungere

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

al tuo application.propertiesfile.


2
Questa dovrebbe essere la risposta accettata se non hai bisogno di un'origine dati jdbc.
Farrukh Najmi,

Ciò è particolarmente utile quando si hanno più profili e uno di questi è in memoria.
Doe Johnson,

Per quanto mi riguarda, avevo bisogno di exluse HibernateJpaAutoConfiguration anche per lavoro: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
AbdelRahmane

20

Ora che guardo più da vicino, penso che il problema di DataSource sia un'aringa rossa. La configurazione automatica dell'ibernazione di avvio viene attivata ed è ciò che causa la richiesta di un'origine dati. Hibernate è sul percorso di classe perché hai una dipendenza da spring-boot-starter-data-jpacui si inserisce hibernate-entitymanager.

Aggiorna la tua spring-boot-starter-data-jpadipendenza per escludere l'ibernazione:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
        </exclusion>
    </exclusions>
</dependency>

1
L'errore è sempre lo stesso :-(
quark

Sei sicuro di aver applicato correttamente l'esclusione? mvn dependency: tree ti aiuterà a controllare. Con l'esclusione in atto, il problema DataSource è andato per me (ora vedo "Digitare demo.core.entity.Resource non è un tipo gestito noto", ma questo è un problema separato)
Andy Wilkinson,

Ciao Andy, significa che hai testato il progetto che ho pubblicato? sembra promettente
quark

1
Sì, era con il progetto che hai pubblicato. L'unica modifica che ho apportato è stata l'aggiunta dell'esclusione Hibernate come descritto sopra.
Andy Wilkinson,

Bene, sembra che quello che hai compilato fosse il ramo principale o il ramo JPA?
quark

14

Dal manuale di primavera .

Spring Boot può configurare automaticamente i database H2, HSQL e Derby incorporati. Non è necessario fornire alcun URL di connessione, è sufficiente includere una dipendenza build per il database incorporato che si desidera utilizzare.

Ad esempio, le dipendenze tipiche di POM sarebbero:

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

Per me tralasciare la dipendenza spring-boot-starter-data-jpa e semplicemente usare la dipendenza spring-boot-starter-jdbc ha funzionato come un incantesimo, purché avessi incluso h2 (o hsqldb) come dipendenze.


9

Spring boot cercherà le proprietà del datasoure nel file application.properties.

Si prega di definirlo nel file application.properties o yml

application.properties

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

Se è necessaria la propria configurazione, è possibile impostare il proprio profilo e utilizzare i valori dell'origine dati durante la creazione del bean.



5

Ho affrontato questa eccezione mentre stavo facendo API per ElasticSearch usando Spring Data. Ho fatto quanto segue e ha funzionato.

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

3

Ho avuto due dipendenze con groupId di org.springframework.data, quindi ho rimosso jpa e mantenuto solo mongodb, e ha funzionato!

<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

Risolvo il mio problema semplicemente aggiungendo @AutoConfigureTestDatabase (replace = Replace.NONE)

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

}

2

Ho ricevuto il messaggio di errore nel titolo o.s.b.d.LoggingFailureAnalysisReporterinsieme al messaggio "APPLICAZIONE NON RIUSCITA PER INIZIARE". Si è scoperto che non avevo aggiunto -Dspring.profiles.active=devalla mia configurazione di debug Eclipse quindi non avevo un profilo attivo.


1
Esattamente anche il mio problema. Aggiunta del flag agli argomenti VM della configurazione di debug ( Run -> Debug configurations... -> Maven build -> [build name] -> JRE -> VM arguments)
sshow

2

Anch'io ho affrontato lo stesso problema.

Cannot determine embedded database driver class for database type NONE.

Nel mio caso, l'eliminazione del file jar dal repository corrispondente al database risolve il problema. Nel repository era presente un vaso danneggiato che causava il problema.


1

Nel mio caso, ho inserito nel mio pom una dipendenza maven per org.jasig.cas che ha innescato una dipendenza di ibernazione e che ha fatto sì che Spring Boot cercasse un'origine dati per configurare automaticamente la persistenza dell'ibernazione. L'ho risolto aggiungendo la dipendenza maven com.h2database come suggerito dall'utente672009. Grazie ragazzi!


1

Poiché questo è uno dei primi argomenti restituiti in Google per questo errore, posterò quello che ho fatto nel caso qualcuno dovesse affrontare lo stesso problema .. Non volevo escludere DataSourceAutoConfigurationné usare un database di memoria ..

Nel mio caso stavo impostando i parametri come dicevano gli altri ripetitori ma il application.propertiesfile era nella cartella sbagliata .. lol

Quindi, nel caso in cui nulla del genere funzioni, controlla se il file è dentro src/main/resources! Nel mio caso era dentrosrc/main/resources/static


1

La risposta è molto semplice, SpringBoot cercherà il driver di database incorporabile, se non hai configurato in nessuna delle tue configurazioni in formato XML o Annotazioni, genererà questa eccezione. Apporta le modifiche alla tua annotazione in questo modo

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
questo escluderà DataSourceAutoConfiguration. E il completamento della codifica semplice perfetta sarebbe efficace se hai configurato correttamente la tua classe.

    @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

Se hai davvero bisogno di "spring-boot-starter-data-jpa" come dipendenza del tuo progetto e allo stesso tempo non vuoi consentire alla tua app di accedere a nessun database, puoi semplicemente escludere le classi di configurazione automatica

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

1

Ho provato tutte le cose sopra menzionate ma non sono riuscito a risolvere il problema. Sto usando SQLite e il mio file SQLite era nella directory delle risorse.

a) Installazione eseguita per IDE

Devo aggiungere manualmente le righe seguenti nel file .classpath del mio progetto.

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

Successivamente, ho aggiornato e ripulito il progetto dalla barra dei menu in alto. come Project-> Clean-> My Project Name.

Successivamente, eseguo il progetto e il problema è stato risolto.

application.properties per il mio progetto è

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) Installazione eseguita se la distribuzione Jar genera lo stesso errore

Devi aggiungere le seguenti righe al tuo pom.xml

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

Può essere che possa aiutare qualcuno.


1

se non si dispone di alcun database nella propria applicazione, disabilitare semplicemente la configurazione automatica dell'origine dati aggiungendo l'annotazione seguente.

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

1

Lo stesso per @Anas. Posso eseguirlo in Eclipse, ma quando uso "java -jar ..." eseguirlo, mi dà questo errore. Quindi trovo che il mio percorso di build java sia sbagliato, manca la cartella "src / main / resources", quindi l'applicazione non riesce a trovare application.properties. Quando aggiungo la cartella "src / main / resources" nel percorso di build Java, ha funzionato.

Inoltre, devi aggiungere "@PropertySource ({" application.properties "})" nella tua classe di applicazione.

Screenshot-1

Screenshot-2


Grazie! Ho provato quattro ore
Santiago Martí Olbrich il

1

Ecco come ho risolto questo problema.

Nel mio caso: ho dovuto configurare l'origine dati per MySQL Server, che era un server esterno.

Come tutti sappiamo, Spring Boot ha la capacità di configurare automaticamente DataSource per database incorporati.

Pertanto, mi sono reso conto che dovevo disabilitare la configurazione automatica dell'origine dati per utilizzare la mia configurazione personalizzata.

Come accennato in precedenza da molti, ho disabilitato la configurazione DataSource automatica di Spring Boot su application.properties

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

Ho definito tutte le proprietà di configurazione dell'ibernazione in un file separato: hibernate-mysql.properties

Quindi, ho codificato la mia configurazione di ibernazione personalizzata nel modo seguente e il problema è stato risolto.

Il mio modo di configurare l'origine dati desiderata in base alle proprietà in un file di proprietà personalizzato e popolare LocalSessionFactoryBean con l'origine dati e altre configurazioni di ibernazione.

Sospendi classe di configurazione personalizzata: -
-------------------------------------------- -------------

Sospendi configurazione personalizzata


1

Usa questa dipendenza sottostante.

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

Non avevo bisogno di un database e stavo ottenendo questo errore. Ho aggiunto questo e risolto.
markthegrea,

1

Nel mio caso, usando IDEA, dopo aver rimosso la outdirectory, tutto torna alla normalità. Solo non so perché, ma ha funzionato.


1

Avrei il problema simile ed escludendo DataSourceAutoConfiguration e HibernateJpaAutoConfiguration ho risolto il problema.

Ho aggiunto queste due righe nel mio file application.properties e ha funzionato.

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

1

Sono già state pubblicate abbastanza risposte. Tuttavia, sto postando quale errore ho fatto e come l'ho corretto.

Nel mio caso, avevo impacchettato il mio progetto come pomanzichéjar

pom.xml:

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

Cambiato in:

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

Può essere utile per qualcuno con lo stesso errore.


0

È possibile scaricare derby-10.10.1.1.jar dal repository Maven e posizionarlo nella cartella WEB-INF / lib, come questa applicazione / WEB-INF / lib / derby-10.10.1.1.jar. Il tuo AnnotationConfigEmbeddedWebApplicationContext raccoglierà il driver del database e il tuo server web inizierà a funzionare senza problemi :-)


0

Se si utilizza Gradle, includere il vaso destro del driver come di seguito:

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

O se usi Maven, fallo in stile Maven, dovrebbe risolvere il tuo problema.


0

A chiunque venga a questo thread dopo ore di sbattere la testa contro un muro. Ho risolto questo errore cambiando

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

per

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

nel mio file schema.sql nella directory delle risorse.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.