Spring Boot - Não é possível determinar a classe de driver de banco de dados incorporado para o tipo de banco de dados NONE

210

Este é o erro gerado ao tentar executar meu aplicativo da 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)

Eu acredito que tenho a combinação certa de datanucleus-appenginee datanucleusjarros:

2.1: Requer o DataNucleus 3.1.x (núcleo, api-jdo, api-jpa, aprimorador). Requer SDK 1.6.4+. Observe que esta versão do Datanucleus não é mais suportada pelo projeto DataNucleus

Configuração do aplicativo 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>

Gostaria de saber o que poderia estar faltando no meu aplicativo? Segui as instruções aqui Usando o Spring Data JPA no Google Appengine

quarks
fonte
Se eu comentar o @EnableAutoConfiguration, recebo: [INFO] AVISO: falha no metricFilter: org.springframework.beans.factory.NoSuchBeanDefinitionException: nenhum bean chamado 'metricFilter' está definido
quarks
Aqui está o código completo: bit.ly/1i53oAq
quarks
No meu caso, era spring-boot-starter-data-jpa
Anand Rockzz 31/12/16

Respostas:

170

Você não forneceu ao Spring Boot informações suficientes para configurar automaticamente a DataSource. Para fazer isso, você vai precisar adicionar algumas propriedades para application.propertiescom o spring.datasourceprefixo. Dê uma olhada no DataSourceProperties para ver todas as propriedades que você pode definir.

Você precisará fornecer o nome apropriado da classe de URL e driver:

spring.datasource.url = 
spring.datasource.driver-class-name = 
Andy Wilkinson
fonte
3
não sei o que colocar aqui Estou usando o DataNucleus + Google App Engine
quarks
@xybrek Basta adicionar o arquivo application.properties ao seu aplicativo e adicionar as propriedades da fonte de dados.
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-plataforma = org.hibernate.dialect.MySQLDialect
swapyonubuntu
1
Eu fiz o mesmo, o código está funcionando bem quando executo o aplicativo em intellij, mas quando crio um jar e o executo usando java -jar myJar.jarele está me dando o mesmo erro.
Anas
1
Oi @AndyWilkinson Estou enfrentando o mesmo erro com o meu código cassandra boot de primavera. Lá estou tentando me conectar à cassandra. E na conectividade cassandra, você não fornece spring.datasource.url = … spring.datasource.driver-class-name = …propriedades. Então eu adicionei @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})na minha classe principal. Mas depois de colocar isso agora, estou recebendo erro 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.. Por favor ajude.
Kumarhimanshu449
113

Se você deseja usar o banco de dados H2 incorporado do iniciador do Spring Boot, adicione a dependência abaixo ao seu arquivo pom.

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

Mas, como mencionado nos comentários, o banco de dados H2 incorporado mantém os dados na memória e não os armazena permanentemente.

user672009
fonte
2
Eu estava tendo o mesmo problema com o spring-boot-starter-jdbc. Tentei esta sugestão e resolveu o meu problema.
bluecollarcoder
3
Esta não é uma solução real. O H2 não salvará permanentemente os dados até onde eu saiba.
SARose 30/09/15
10
@SARose - Claro que não! É um banco de dados "na memória".
user672009
1
@ user672009, incorreto. H2 não é apenas um banco de dados em memória. Consulte h2database.com/html/features.html . Com isso dito, esta é uma solução ruim para o problema.
Jason Nichols
5
Estou tentando criar o aplicativo de alguém e recebo o erro "Não é possível determinar ... para o tipo de banco de dados NENHUM". Depois de tentar outras soluções, eu tento esta e funciona. O aplicativo foi criado para usar dois bancos de dados, configurados por propriedades. Eu os configurei, mas recebi este erro. Depois de adicionar a dependência H2, não há mais erros. O aplicativo usa os outros DBs que eu especifiquei, nada vai para H2, AFAICT. Pode ser um efeito colateral da inicialização por mola ou um problema no design deste aplicativo, mas requer H2 antes de iniciar. Como outras pessoas têm esse problema, não pode ser apenas esse aplicativo.
LS
87

Eu teria o mesmo problema e excluir o DataSourceAutoConfiguration resolveu o problema.

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

    public static void main(String[] args) {
        SpringApplication.run(RecommendationEngineWithCassandraApplication.class, args);
    }
}
Adelin
fonte
3
Obrigado! poderia configurá-lo application.properties, comospring.main.web-environment=false
zhuguowei 12/05
1
Encontrei @EnableAutoConfigurationem uma classe não SpringBootApplication e tive que adicionar a exclusão também. TBH, eu provavelmente não preciso de @EnableAutoConfigurationlá em primeiro lugar: /
cs94njw
63

Isso funcionou para mim (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 {

Exclua as duas classes.

Não funcionou com

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
aliopi
fonte
7
Este é para pessoas que não entendem por que 'misteriosamente' exigem acesso ao banco de dados em seu aplicativo quando não deveriam (por exemplo, quando o acesso ao banco de dados está sendo tratado por algum outro aplicativo e este é apenas um 'cliente').
Cst1992
31

Você pode adicionar

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

para o seu application.propertiesarquivo.

redoff
fonte
2
Essa deve ser a resposta aceita se você não precisar de uma fonte de dados jdbc.
Farrukh Najmi
Isso é especialmente útil quando você possui vários perfis e um deles está na memória.
Doe Johnson
Para mim, eu precisava exluse HibernateJpaAutoConfiguration também para o trabalho: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
AbdelRahmane
20

Agora que olho mais de perto, acho que o problema do DataSource é um problema. A configuração automática do Hibernate da inicialização está sendo acionada e é isso que faz com que um DataSource seja necessário. O Hibernate está no caminho de classe porque você tem uma dependência da spring-boot-starter-data-jpaqual puxahibernate-entitymanager .

Atualize sua spring-boot-starter-data-jpadependência para excluir o 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
fonte
1
O erro continua o mesmo :-(
quarks
Tem certeza de que aplicou a exclusão corretamente? mvn dependency: tree o ajudará a verificar. Com a exclusão em vigor, o problema do DataSource desapareceu para mim (agora vejo "O tipo demo.core.entity.Resource não é um tipo gerenciado conhecido", mas esse é um problema separado)
Andy Wilkinson
Oi Andy, significa que você testou o projeto que eu publiquei? parece promissor
quarks
1
Sim, isso foi com o projeto que você postou. A única alteração que fiz foi adicionar a exclusão do Hibernate, conforme descrito acima.
Andy Wilkinson
Legal, parece que você compilou o ramo principal ou o ramo JPA?
quarks
14

Do manual da primavera .

O Spring Boot pode configurar automaticamente os bancos de dados H2, HSQL e Derby incorporados. Você não precisa fornecer nenhum URL de conexão, basta incluir uma dependência de construção no banco de dados incorporado que deseja usar.

Por exemplo, as dependências típicas da POM seriam:

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

Para mim, deixei de fora a dependência spring-boot-starter-data-jpa e apenas o uso da dependência spring-boot-starter-jdbc funcionou como um encanto, desde que eu tivesse h2 (ou hsqldb) incluído como dependências.

Arturo Araya
fonte
9

A inicialização do Spring procurará propriedades de dataoure no arquivo application.properties.

Defina-o no arquivo application.properties ou yml

application.properties

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

Se você precisar de sua própria configuração, poderá definir seu próprio perfil e usar os valores da fonte de dados durante a criação do bean.

Vino
fonte
7

Não, se for tarde demais para responder. Eu poderia resolver esse problema excluindo o DataSourceAutoConfiguration da inicialização por primavera.

bcsshdha
fonte
3
A documentação sobre exclusão é encontrada aqui: docs.spring.io/spring-boot/docs/current/reference/html/…
Shorn
Não é tarde demais para mim. Essa foi a maneira mais simples de solucionar o problema do meu projeto.
9788 Jeff Francês
5

Eu enfrentei essa exceção enquanto fazia APIs para o ElasticSearch usando o Spring Data. Eu fiz o seguinte e funcionou.

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

Eu tinha duas dependências com o groupId do org.springframework.data, depois removi o jpa e mantive apenas o mongodb, e funcionou!

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

Resolvo meu problema apenas adicionando @AutoConfigureTestDatabase (replace = Replace.NONE)

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

}
Virmerson
fonte
2

Recebi a mensagem de erro no título o.s.b.d.LoggingFailureAnalysisReporterjunto com a mensagem "O APLICATIVO FOI INICIADO". Aconteceu que eu não havia adicionado -Dspring.profiles.active=devà minha configuração de depuração do Eclipse, portanto não tinha perfil ativo.

Noumenon
fonte
1
Exatamente o meu problema também. Adicionando o sinalizador aos argumentos da VM da configuração de depuração ( Run -> Debug configurations... -> Maven build -> [build name] -> JRE -> VM arguments)
sshow 31/08
2

Eu também enfrentei o mesmo problema.

Cannot determine embedded database driver class for database type NONE.

No meu caso, excluir o arquivo jar do repositório correspondente ao banco de dados corrige o problema. Havia um frasco corrompido presente no repositório que estava causando o problema.

naresh goyal
fonte
1

No meu caso, coloquei uma dependência grave para org.jasig.cas no meu pom, que acionou uma dependência de hibernação e fez com que o Spring Boot procure uma fonte de dados para configurar automaticamente a persistência de hibernação. Eu o resolvi adicionando a dependência do com.h2database conforme sugerido por user672009. Obrigado rapazes!

user3796391
fonte
1

Como este é um dos primeiros tópicos retornados no google por esse erro, postarei o que fiz caso alguém enfrente o mesmo problema. Não quis excluir DataSourceAutoConfigurationnem usar um banco de dados de memória.

No meu caso, eu estava definindo os parâmetros como os outros replicadores disseram, mas o application.propertiesarquivo estava dentro da pasta errada .. lol

Portanto, caso nada disso funcione, verifique se o arquivo está dentro src/main/resources! No meu caso estava dentrosrc/main/resources/static

Felipe S.
fonte
1

A resposta é muito simples, o SpringBoot procurará o driver de banco de dados incorporável. Se você não configurou nenhuma das suas configurações em forma de XML ou anotações, isso gerará essa exceção. Faça as alterações em sua anotação como esta

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
isso excluirá o DataSourceAutoConfiguration. E a conclusão da Perfect Simple Coding funcionaria se você configurasse corretamente sua 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
fonte
1

Se você realmente precisa de "spring-boot-starter-data-jpa" como sua dependência do projeto e, ao mesmo tempo, não deseja permitir que seu aplicativo acesse nenhum banco de dados, você pode simplesmente excluir as classes de configuração automática

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

Tentei todas as coisas mencionadas acima, mas não consegui resolver o problema. Estou usando o SQLite e meu arquivo SQLite estava no diretório de recursos.

a) Configuração feita para IDE

Preciso adicionar manualmente as linhas abaixo no arquivo .classpath do meu projeto.

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

Depois disso, atualizei e limpei o projeto no MenuBar na parte superior. como Projeto-> Limpar-> Nome do Meu Projeto.

Depois disso, eu executo o projeto e o problema foi resolvido.

application.properties para o meu projeto é

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) Configuração concluída se a implantação do Jar gerar o mesmo erro

Você precisa adicionar as seguintes linhas ao seu pom.xml

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

Pode ser que possa ajudar alguém.

Bagesh Sharma
fonte
1

se você não possui nenhum banco de dados em seu aplicativo, desative a configuração automática da fonte de dados adicionando a anotação abaixo.

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

O mesmo para @Anas. Eu posso executá-lo no Eclipse, mas quando eu uso "java -jar ..." executá-lo, isso me dá esse erro. Então, acho que meu caminho de compilação java está errado, faltando a pasta "src / main / resources", portanto, o aplicativo não consegue encontrar application.properties. Quando adiciono a pasta "src / main / resources" no caminho de compilação java, ela funcionou.

E você precisa adicionar "@PropertySource ({" application.properties "})" na sua classe Application.

Captura de tela-1

Captura de tela-2

谢兆鑫
fonte
Obrigado! Estou tentando há quatro horas
Santiago Martí Olbrich
1

Foi assim que resolvi esse problema.

No meu caso: eu tive que configurar a fonte de dados para o MySQL Server, que era um servidor externo.

Como todos sabemos, a inicialização do Spring tem a capacidade de configurar automaticamente o DataSource para bancos de dados incorporados.

Assim, percebi que tinha que desativar a configuração automática da fonte de dados para usar minha configuração personalizada.

Como mencionado acima por muitos, desativei a configuração Automática do DataSource do Spring Boot em application.properties

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

Eu defini todas as propriedades de configuração do hibernate em um arquivo separado: hibernate-mysql.properties

Em seguida, codifiquei minha própria configuração de hibernação personalizada da seguinte maneira e resolvi o problema.

Minha maneira de configurar o DataSource desejado com base nas propriedades em um arquivo de propriedades personalizadas e preencher o LocalSessionFactoryBean com sua fonte de dados e outras configurações de hibernação.

Classe de configuração personalizada do Hibernate: -
-------------------------------------------- -------------

Configuração personalizada de hibernação

Philip Dilip
fonte
1

Use isso abaixo dependência.

<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
   <scope>runtime</scope>
</dependency>
Lova Chittumuri
fonte
Eu não precisava de um banco de dados e estava recebendo esse erro. Eu adicionei isso e ele corrigiu.
markthegrea
1

No meu caso, usando o IDEA, depois de remover o outdiretório, tudo volta ao normal. Só não sei por que, mas deu certo.

Leo Lee
fonte
1

Eu teria o problema semelhante e excluir o DataSourceAutoConfiguration e o HibernateJpaAutoConfiguration resolveu o problema.

Eu adicionei essas duas linhas no meu arquivo application.properties e funcionou.

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

Já foram postadas respostas suficientes. No entanto, estou postando o erro que cometi e como o corrigi.

No meu caso, eu empacotei meu projeto como em pomvez dejar

pom.xml:

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

Alterado para:

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

Pode ser útil para alguém com o mesmo erro.

Sangeeth
fonte
0

Você pode fazer o download do derby-10.10.1.1.jar no Maven Repository e colocá-lo em sua pasta WEB-INF / lib, como este Aplicativo / WEB-INF / lib / derby-10.10.1.1.jar. Seu AnnotationConfigEmbeddedWebApplicationContext incorporado capturará o driver do banco de dados e seu servidor web começará a ser executado sem problemas :-)

Praveen Kumar KS
fonte
0

Se você estiver usando o Gradle, inclua o frasco correto do driver, como abaixo:

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

Ou, se usar o Maven e fazê-lo no estilo Maven, deve resolver o seu problema.

RWork
fonte
0

Para quem chega a esse segmento depois de horas batendo sua cabeça contra uma parede. Eu resolvi esse erro alterando

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

para

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

no meu arquivo schema.sql no diretório de recursos.

decapo
fonte