Spring Boot - Impossible de déterminer la classe de pilote de base de données intégrée pour le type de base de données NONE

210

Voici l'erreur qui se produit lorsque vous essayez d'exécuter mon application 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)

Je crois avoir la bonne combinaison de datanucleus-appengineet datanucleusbocaux:

2.1: Nécessite DataNucleus 3.1.x (core, api-jdo, api-jpa, enhancer). Nécessite le SDK 1.6.4+ Notez que cette version de Datanucleus n'est plus prise en charge par le projet DataNucleus

Configuration de l'application 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>

Je me demande ce qui pourrait manquer dans mon application? J'ai suivi les instructions d'ici à l' aide de Spring Data JPA sur Google Appengine

quarks
la source
Si je commente la @EnableAutoConfiguration, j'obtiens: [INFO] AVERTISSEMENT: échec de metricFilter: org.springframework.beans.factory.NoSuchBeanDefinitionException: aucun bean nommé 'metricFilter' n'est défini
quarks
Voici le code complet: bit.ly/1i53oAq
quarks
Dans mon cas, c'était Spring-boot-starter-data-jpa
Anand Rockzz

Réponses:

170

Vous n'avez pas fourni à Spring Boot suffisamment d'informations pour configurer automatiquement a DataSource. Pour ce faire, vous devrez ajouter des propriétés à application.propertiesavec le spring.datasourcepréfixe. Jetez un œil à DataSourceProperties pour voir toutes les propriétés que vous pouvez définir.

Vous devrez fournir l'URL et le nom de classe de pilote appropriés:

spring.datasource.url = 
spring.datasource.driver-class-name = 
Andy Wilkinson
la source
3
Je ne sais pas quoi mettre ici J'utilise DataNucleus + Google App Engine
quarks
@xybrek Ajoutez simplement le fichier application.properties dans votre application et ajoutez-y les propriétés de la source de données.
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
J'ai fait la même chose, le code fonctionne bien lorsque j'exécute l'application dans intellij, mais lorsque je crée un bocal et que je l'exécute à l'aide, java -jar myJar.jaril me donne la même erreur.
Anas
1
Salut @AndyWilkinson Je fais face à la même erreur avec mon code cassandra de botte de printemps. Là, j'essaye de me connecter à cassandra. Et dans la connectivité cassandra, vous ne donnez pas de spring.datasource.url = … spring.datasource.driver-class-name = …propriétés. J'ai donc ajouté @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})dans ma classe principale. Mais après avoir mis cela maintenant, je reçois une erreur 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.. Veuillez aider.
kumarhimanshu449
113

Si vous souhaitez utiliser la base de données H2 intégrée à partir du démarreur Spring Boot, ajoutez la dépendance ci-dessous à votre fichier pom.

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

Mais comme mentionné dans les commentaires, la base de données H2 intégrée conserve les données en mémoire et ne les stocke pas en permanence.

user672009
la source
2
J'avais le même problème avec spring-boot-starter-jdbc. J'ai essayé cette suggestion et cela a résolu mon problème.
bluecollarcoder
3
Ce n'est pas une vraie solution. Pour autant que je sache, H2 n'enregistrera pas de façon permanente les données.
SARose
10
@SARose - Bien sûr que non! C'est une base de données "en mémoire".
user672009
1
@ user672009, incorrect. H2 n'est pas seulement une base de données en mémoire. Voir h2database.com/html/features.html . Cela dit, c'est une mauvaise solution au problème.
Jason Nichols du
5
J'essaie de créer l'application de quelqu'un et j'obtiens l'erreur "Impossible de déterminer ... pour le type de base de données AUCUN". Après avoir essayé d'autres solutions, j'essaye celle-ci et ça marche. L'application a été conçue pour utiliser deux bases de données, configurées par propriétés. Je les ai configurés, mais j'ai eu cette erreur. Après avoir ajouté la dépendance H2, plus d'erreurs. L'application utilise les autres bases de données que j'ai spécifiées, rien ne va jamais à H2, AFAICT. Peut être un effet secondaire de Spring-Boot ou un problème dans la conception de cette application, mais cela nécessite H2 avant de commencer. Étant donné que d'autres ont ce problème, il ne peut pas s'agir uniquement de cette application.
LS
87

J'aurais le même problème et l'exclusion de DataSourceAutoConfiguration a résolu le problème.

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

    public static void main(String[] args) {
        SpringApplication.run(RecommendationEngineWithCassandraApplication.class, args);
    }
}
Adelin
la source
3
Merci! pourrait le configurer application.properties, commespring.main.web-environment=false
zhuguowei
1
J'ai trouvé @EnableAutoConfigurationdans une classe non-SpringBootApplication et j'ai dû y ajouter également l'exclusion. TBH, je n'en ai probablement pas besoin @EnableAutoConfigurationen premier lieu: /
cs94njw
63

Cela a fonctionné pour moi (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 {

Exclure les deux classes.

Cela n'a pas fonctionné avec

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
aliopi
la source
7
Celui-ci est destiné aux personnes qui ne comprennent pas pourquoi elles ont `` mystérieusement '' besoin d'un accès à la base de données dans leur application alors qu'elles ne le devraient pas (par exemple, lorsque l'accès à la base de données est géré par une autre application et que celle-ci n'est qu'un `` client '').
cst1992 du
31

Vous pouvez ajouter

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

à votre application.propertiesdossier.

redoff
la source
2
Cela devrait être la réponse acceptée si vous n'avez pas besoin d'une source de données jdbc.
Farrukh Najmi
Ceci est particulièrement utile lorsque vous avez plusieurs profils et que l'un d'eux est en mémoire.
Doe Johnson
Pour moi, je devais exluse HibernateJpaAutoConfiguration aussi pour le travail: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
Abdelrahmane
20

Maintenant que je regarde de plus près, je pense que le problème DataSource est un redingue. L'auto-configuration Hibernate de démarrage est déclenchée et c'est ce qui oblige une DataSource à être requise. Hibernate est sur le chemin de classe parce que vous avez une dépendance sur spring-boot-starter-data-jpace qui tire hibernate-entitymanager.

Mettez à jour votre spring-boot-starter-data-jpadépendance pour exclure 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
la source
1
Erreur toujours la même :-(
quarks
Êtes-vous sûr d'avoir appliqué correctement l'exclusion? dépendance mvn: l'arborescence vous aidera à vérifier. Avec l'exclusion en place, le problème DataSource est parti pour moi (je vois maintenant "Type demo.core.entity.Resource n'est pas un type géré connu", mais c'est un problème distinct)
Andy Wilkinson
Salut Andy, cela signifie-t-il que vous avez testé le projet réel que j'ai publié? semble prometteur
quarks
1
Oui, c'était avec le projet que vous avez publié. La seule modification que j'ai apportée a été d'ajouter l'exclusion Hibernate comme décrit ci-dessus.
Andy Wilkinson
Cool, il semble que ce que vous avez compilé soit la branche master ou la branche JPA?
quarks
14

Tiré du manuel du printemps .

Spring Boot peut configurer automatiquement les bases de données H2, HSQL et Derby intégrées. Vous n'avez pas besoin de fournir d'URL de connexion, incluez simplement une dépendance de construction à la base de données intégrée que vous souhaitez utiliser.

Par exemple, les dépendances POM typiques seraient:

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

Pour moi, laisser de côté la dépendance spring-boot-starter-data-jpa et utiliser simplement la dépendance spring-boot-starter-jdbc a fonctionné comme un charme, tant que j'avais h2 (ou hsqldb) inclus comme dépendances.

Arturo Araya
la source
9

Spring boot recherchera les propriétés de la source de données dans le fichier application.properties.

Veuillez le définir dans le fichier application.properties ou yml

application.properties

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

Si vous avez besoin de votre propre configuration, vous pouvez définir votre propre profil et utiliser les valeurs de la source de données lors de la création du bean.

Vino
la source
7

Je ne sais pas s'il est trop tard pour répondre. J'ai pu résoudre ce problème en excluant DataSourceAutoConfiguration de Spring Boot.

bcsshdha
la source
3
Documentation sur l'exclusion disponible ici: docs.spring.io/spring-boot/docs/current/reference/html/…
Shorn
Pas trop tard pour moi. C'était le moyen le plus simple de contourner le problème pour mon projet.
Jeff French
5

J'ai fait face à cette exception pendant que je faisais des API pour ElasticSearch à l'aide de Spring Data. J'ai fait ce qui suit et cela a fonctionné.

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

J'avais deux dépendances avec groupId d'org.springframework.data, puis j'ai supprimé jpa et gardé mongodb uniquement, et cela a fonctionné!

<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
la source
2

Je résout mon problème en ajoutant simplement @AutoConfigureTestDatabase (replace = Replace.NONE)

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

}
Virmerson
la source
2

J'ai reçu le message d'erreur dans le titre o.s.b.d.LoggingFailureAnalysisReporteravec le message "ÉCHEC DE L'APPLICATION". Il s'est avéré que je n'avais pas ajouté -Dspring.profiles.active=devà ma configuration de débogage Eclipse, donc je n'avais pas de profil actif.

Noumenon
la source
1
Exactement mon problème aussi. Ajout du drapeau aux arguments VM de la configuration de débogage ( Run -> Debug configurations... -> Maven build -> [build name] -> JRE -> VM arguments)
sshow
2

Moi aussi, j'ai été confronté au même problème.

Cannot determine embedded database driver class for database type NONE.

Dans mon cas, la suppression du fichier jar du référentiel correspondant à la base de données résout le problème. Un pot corrompu était présent dans le référentiel, ce qui provoquait le problème.

naresh goyal
la source
1

Dans mon cas, je lui ai mis une dépendance maven pour org.jasig.cas dans mon pom qui a déclenché une dépendance d'hibernation et qui a amené Spring Boot à rechercher une source de données pour configurer automatiquement la persistance d'hibernation. Je l'ai résolu en ajoutant la dépendance maven com.h2database comme suggéré par user672009. Merci les gars!

user3796391
la source
1

Comme c'est l'un des premiers sujets retournés dans google pour cette erreur, je posterai ce que j'ai fait au cas où quelqu'un rencontrerait le même problème .. Je ne voulais pas exclure DataSourceAutoConfigurationni utiliser une base de données mémoire ..

Dans mon cas, je définissais les paramètres comme l'ont dit les autres réponses, mais le application.propertiesfichier était dans le mauvais dossier. Lol

Donc, si rien de tel ne fonctionne, vérifiez si le fichier est à l'intérieur src/main/resources! Dans mon cas, c'était à l'intérieursrc/main/resources/static

Felipe S.
la source
1

La réponse est très simple, SpringBoot recherchera un pilote de base de données embarquable.Si vous n'avez pas configuré dans aucune de vos configurations sous forme de XML ou d'annotations, il lèvera cette exception. Apportez les modifications dans votre annotation comme ceci

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
cela exclura la DataSourceAutoConfiguration. Et l'achèvement du codage simple parfait serait un travail si vous avez correctement configuré votre 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);
       }
    }

Praveen Kumar KS
la source
1

Faire ci-dessous fonctionne.

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

Mais si je voulais avoir dataSource, je ne devrais pas faire la configuration ci-dessus. Le lien ci-dessous indique que nous avons besoin de toutes les propriétés du fichier application.properties. Toutes les propriétés doivent commencer par spring.datasource.*

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

Anil
la source
1

Si vous avez vraiment besoin de "spring-boot-starter-data-jpa" comme dépendance de votre projet et en même temps que vous ne voulez pas autoriser votre application à accéder à une base de données, vous pouvez simplement exclure les classes de configuration automatique

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

J'ai essayé toutes les choses mentionnées ci-dessus mais je n'ai pas pu résoudre le problème. J'utilise SQLite et mon fichier SQLite était dans le répertoire des ressources.

a) Configuration terminée pour IDE

J'ai besoin d'ajouter manuellement les lignes ci-dessous dans le fichier .classpath de mon projet.

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

Après cela, j'ai actualisé et nettoyé le projet à partir de MenuBar en haut. comme Projet-> Nettoyer-> Mon nom de projet.

Après cela, j'exécute le projet et le problème est résolu.

application.properties pour mon projet est

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) Configuration terminée si le déploiement de Jar renvoie la même erreur

Vous devez ajouter les lignes suivantes à votre pom.xml

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

Peut-être que cela peut aider quelqu'un.

Bagesh Sharma
la source
1

si vous n'avez pas de base de données dans votre application, désactivez simplement la configuration automatique de la source de données en ajoutant l'annotation ci-dessous.

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

Même chose pour @Anas. Je peux l'exécuter dans Eclipse, mais quand j'utilise "java -jar ..." l'exécuter, cela me donne cette erreur. Ensuite, je trouve que mon chemin de construction java est incorrect, il manque le dossier «src / main / resources», donc l'application ne peut pas trouver application.properties. Lorsque j'ajoute le dossier «src / main / resources» dans le chemin de construction java, cela a fonctionné.

Et, vous devez ajouter "@PropertySource ({" application.properties "})" dans votre classe Application.

Capture d'écran-1

Capture d'écran-2

谢兆鑫
la source
Merci! J'ai essayé quatre heures
Santiago Martí Olbrich
1

C'est ainsi que j'ai résolu ce problème.

Dans mon cas: j'ai dû configurer la source de données pour MySQL Server, qui était un serveur externe.

Comme nous le savons tous, Spring Boot a la capacité de configurer automatiquement DataSource pour les bases de données intégrées.

Ainsi, j'ai réalisé que je devais désactiver la configuration automatique de la source de données afin d'utiliser ma configuration personnalisée.

Comme mentionné ci-dessus par beaucoup, j'ai désactivé la configuration automatique DataSource de Spring Boot sur application.properties

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

J'ai défini toutes les propriétés de configuration de mise en veille prolongée dans un fichier séparé: hibernate-mysql.properties

Ensuite, j'ai codé ma propre configuration de mise en veille prolongée personnalisée de la manière suivante et cela a résolu le problème.

Ma façon de configurer la DataSource souhaitée en fonction des propriétés d'un fichier de propriétés personnalisé et de remplir votre LocalSessionFactoryBean avec votre source de données et une autre configuration de mise en veille prolongée.

Classe de configuration personnalisée Hibernate: -
-------------------------------------------- -------------

Hibernate Configuration personnalisée

Philip Dilip
la source
1

Utilisez cette dépendance ci-dessous.

<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
   <scope>runtime</scope>
</dependency>
Lova Chittumuri
la source
Je n'avais pas besoin d'une base de données et recevais cette erreur. J'ai ajouté cela et il l'a corrigé.
markthegrea
1

Dans mon cas, en utilisant IDEA, après avoir supprimé le outrépertoire, tout revient à la normale. Je ne sais juste pas pourquoi, mais ça a fonctionné.

Leo Lee
la source
1

J'aurais le problème similaire et l'exclusion de DataSourceAutoConfiguration et HibernateJpaAutoConfiguration a résolu le problème.

J'ai ajouté ces deux lignes dans mon fichier application.properties et cela a fonctionné.

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

Déjà suffisamment de réponses ont été publiées. Cependant, je poste quelle erreur j'ai commise et comment je l'ai corrigée.

Dans mon cas, j'avais emballé mon projet au pomlieu dejar

pom.xml:

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

Changé en:

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

Cela peut être utile pour quelqu'un qui a la même erreur.

Sangeeth
la source
0

Vous pouvez télécharger le derby-10.10.1.1.jar à partir du référentiel Maven et le placer dans votre dossier WEB-INF / lib, comme cette application / WEB-INF / lib / derby-10.10.1.1.jar. Votre AnnotationConfigEmbeddedWebApplicationContext intégré récupérera le pilote de base de données et votre serveur Web commencera à fonctionner sans aucun problème :-)

Praveen Kumar KS
la source
0

Si vous utilisez Gradle, incluez le pot droit du pilote comme ci-dessous:

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

Ou si vous utilisez Maven puis faites-le dans le style Maven, cela devrait résoudre votre problème.

RWork
la source
0

À quiconque vient sur ce fil après des heures à se cogner la tête contre un mur. J'ai résolu cette erreur en changeant

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

à

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

dans mon fichier schema.sql dans le répertoire des ressources.

decapo
la source