Spring Boot: no se puede determinar la clase de controlador de base de datos integrada para el tipo de base de datos NINGUNO


210

Este es el error que se produce al intentar ejecutar mi aplicación 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)

Creo que tengo la combinación correcta de datanucleus-appenginey datanucleusfrascos:

2.1: Requiere DataNucleus 3.1.x (core, api-jdo, api-jpa, enhancer). Requiere SDK 1.6.4+ Tenga en cuenta que esta versión de Datanucleus ya no es compatible con el proyecto DataNucleus

Configuración de la aplicación 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>

Me pregunto qué podría faltar en mi aplicación. Seguí las instrucciones desde aquí Usando Spring Data JPA en Google Appengine


Si comento la @EnableAutoConfiguration obtengo: [INFO] ADVERTENCIA: error metricFilter: org.springframework.beans.factory.NoSuchBeanDefinitionException: No se define ningún bean llamado 'metricFilter'
quarks

Aquí está el código completo: bit.ly/1i53oAq
quarks

Respuestas:


170

No ha proporcionado a Spring Boot información suficiente para configurar automáticamente a DataSource. Para hacerlo, deberá agregar algunas propiedades application.propertiescon el spring.datasourceprefijo. Echa un vistazo a DataSourceProperties para ver todas las propiedades que puede establecer.

Deberá proporcionar la url y el nombre de clase de controlador adecuados:

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

3
no estoy seguro de qué poner aquí Estoy usando DataNucleus + Google App Engine
quarks

@xybrek Simplemente agregue el archivo application.properties en su aplicación y agregue las propiedades del origen de datos.
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
Hice lo mismo, el código funciona bien cuando ejecuto la aplicación en intellij pero cuando creo un jar y lo ejecuto usando java -jar myJar.jarme está dando el mismo error.
Anas

1
Hola @AndyWilkinson Me enfrento al mismo error con mi código de cassandra de arranque de primavera. Allí estoy tratando de conectarme con Cassandra. Y en conectividad cassandra no le das spring.datasource.url = … spring.datasource.driver-class-name = …propiedades. Así que agregué @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})en mi clase principal. Pero después de poner esto ahora recibo un error 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 ayuda.
kumarhimanshu449

113

Si desea utilizar la base de datos H2 incrustada del arrancador Spring Boot, agregue la dependencia siguiente a su archivo pom.

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

Pero como se menciona en los comentarios, la base de datos H2 integrada mantiene los datos en la memoria y no los almacena de forma permanente.


2
Estaba teniendo el mismo problema con spring-boot-starter-jdbc. Intenté esta sugerencia y solucionó mi problema.
bluecollarcoder

3
Esta no es una solución real. H2 no guardará datos de forma permanente hasta donde yo sepa.
SARose

10
@SARose - ¡Por supuesto que no! Es una base de datos "en memoria".
user672009

1
@ user672009, incorrecto. H2 no es solo una base de datos en memoria. Consulte h2database.com/html/features.html . Dicho esto, esta es una mala solución al problema.
Jason Nichols

55
Estoy tratando de compilar la aplicación de alguien y aparece el error "No se puede determinar ... para el tipo de base de datos NINGUNO". Después de probar otras soluciones, pruebo esta y funciona. La aplicación se hizo para usar dos bases de datos, configuradas por propiedades. Los configuré, pero obtuve este error. Después de agregar la dependencia H2, no más errores. La aplicación utiliza las otras bases de datos que especifiqué, nada pasa a H2, AFAICT. Puede ser un efecto secundario del arranque por resorte o un problema en el diseño de esta aplicación, pero requiere H2 antes de que comience. Como otros tienen este problema, no puede ser solo esta aplicación.
LS

87

Tuve el mismo problema y excluir DataSourceAutoConfiguration resolvió el problema.

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

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

3
¡Gracias! podría configurarlo application.properties, comospring.main.web-environment=false
zhuguowei

1
Encontré @EnableAutoConfigurationen una clase que no es SpringBootApplication, y tuve que agregar la exclusión allí también. TBH, probablemente no necesito @EnableAutoConfigurationallí en primer lugar: /
cs94njw

63

Esto funcionó para mí (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 {

Excluir ambas clases.

No funcionó con

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

77
Este es para personas que no entienden por qué requieren 'misteriosamente' acceso a la base de datos en su aplicación cuando no deberían (por ejemplo, cuando el acceso a la base de datos está siendo manejado por otra aplicación y esta es solo un 'cliente').
cst1992

31

Puedes añadir

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

a su application.propertiesarchivo


2
Esta debería ser la respuesta aceptada si no necesita una fuente de datos jdbc.
Farrukh Najmi

Esto es especialmente útil cuando tiene varios perfiles y uno de ellos está en la memoria.
Doe Johnson

Para mí, necesitaba exluse HibernateJpaAutoConfiguration también con el fin de obra: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
AbdelRahmane

20

Ahora que miro más de cerca, creo que el problema de DataSource es una pista falsa. La configuración automática de Hibernate de Boot se está activando y eso es lo que hace que se requiera un DataSource. Hibernate está en el classpath porque tienes una dependencia de la spring-boot-starter-data-jpaque se detiene hibernate-entitymanager.

Actualice su spring-boot-starter-data-jpadependencia para excluir 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>

1
El error sigue siendo el mismo :-(
quarks

¿Estás seguro de que has aplicado la exclusión correctamente? Dependencia mvn: el árbol lo ayudará a verificar. Con la exclusión en su lugar, el problema de DataSource se ha ido para mí (ahora veo "Tipo demo.core.entity.Resource no es un tipo administrado conocido", pero ese es un problema separado)
Andy Wilkinson

Hola Andy, ¿significa que probaste el proyecto real que publiqué? parece prometedor
quarks

1
Sí, eso fue con el proyecto que publicaste. El único cambio que hice fue agregar la exclusión de Hibernate como se describió anteriormente.
Andy Wilkinson

Genial, parece que lo que compiló fue la rama maestra, o la rama JPA.
Quarks

14

Del manual de primavera .

Spring Boot puede configurar automáticamente las bases de datos H2, HSQL y Derby integradas. No necesita proporcionar ninguna URL de conexión, simplemente incluya una dependencia de compilación en la base de datos incrustada que desea usar.

Por ejemplo, las dependencias típicas de POM serían:

<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 mí, dejar de lado la dependencia spring-boot-starter-data-jpa y simplemente usar la dependencia spring-boot-starter-jdbc funcionó de maravilla, siempre que tuviera h2 (o hsqldb) incluido como dependencias.


9

Spring boot buscará propiedades de datos en el archivo application.properties.

Defínalo en application.properties o en el archivo yml

application.properties

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

Si necesita su propia configuración, puede establecer su propio perfil y utilizar los valores de la fuente de datos mientras se crea el bean.



5

Enfrenté esta excepción mientras hacía API para ElasticSearch usando Spring Data. Hice lo siguiente y funcionó.

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

3

Tenía dos dependencias con groupId de org.springframework.data, luego eliminé jpa y mantuve solo mongodb, ¡y funcionó!

<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

Resuelvo mi problema simplemente agregando @AutoConfigureTestDatabase (replace = Replace.NONE)

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

}

2

Recibí el mensaje de error en el título o.s.b.d.LoggingFailureAnalysisReporterjunto con el mensaje "LA APLICACIÓN NO PUEDE INICIAR". Resultó que no había agregado -Dspring.profiles.active=deva mi configuración de depuración de Eclipse, así que no tenía un perfil activo.


1
Exactamente mi problema también. Agregar el indicador a los argumentos de VM de la configuración de depuración ( Run -> Debug configurations... -> Maven build -> [build name] -> JRE -> VM arguments)
mostrar el

2

Yo también enfrenté el mismo problema.

Cannot determine embedded database driver class for database type NONE.

En mi caso, eliminar el archivo jar del repositorio correspondiente a la base de datos soluciona el problema. Había un contenedor corrupto presente en el repositorio que estaba causando el problema.


1

En mi caso, le puse una dependencia maven para org.jasig.cas en mi pom que desencadenó una dependencia de hibernación y que hizo que Spring Boot buscara una fuente de datos para configurar automáticamente la persistencia de hibernación. Lo resolví agregando la dependencia com.h2database maven según lo sugerido por el usuario672009. ¡Gracias chicos!


1

Como este es uno de los primeros temas devueltos en Google por este error, publicaré lo que hice en caso de que alguien enfrente el mismo problema. No quería excluir DataSourceAutoConfiguration ni utilizar una base de datos de memoria.

En mi caso, estaba estableciendo los parámetros como decían los otros respondedores, pero el application.properties archivo estaba dentro de la carpeta incorrecta ... jajaja

Entonces, en caso de que nada de esto funcione, ¡verifique si el archivo está dentro src/main/resources! En mi caso estaba adentrosrc/main/resources/static


1

La respuesta es muy simple, SpringBoot buscará un controlador de base de datos incorporable. Si no configuró en ninguna de sus configuraciones en forma de XML o Anotaciones, arrojará esta excepción. Haga los cambios en su anotación de esta manera

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
esto excluirá la DataSourceAutoConfiguration. Y la finalización de Perfect Simple Coding funcionaría si ha configurado correctamente su clase.

    @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

Si realmente necesita "spring-boot-starter-data-jpa" como dependencia de su proyecto y, al mismo tiempo, no desea permitir que su aplicación acceda a ninguna base de datos, simplemente puede excluir las clases de configuración automática

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

1

Intenté todas las cosas mencionadas anteriormente pero no pude resolver el problema. Estoy usando SQLite y mi archivo SQLite estaba en el directorio de recursos.

a) Configuración realizada para IDE

Necesito agregar manualmente las siguientes líneas en el archivo .classpath de mi proyecto.

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

Después de eso, actualicé y limpié el proyecto de MenuBar en la parte superior. como Proyecto-> Limpiar-> Mi nombre de proyecto.

Después de eso, ejecuté el proyecto y el problema se resolvió.

application.properties para mi proyecto es

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) Configuración realizada si la implementación de Jar arroja el mismo error

Debe agregar las siguientes líneas a su pom.xml

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

Puede ser que pueda ayudar a alguien.


1

si no tiene ninguna base de datos en su aplicación, simplemente desactive la configuración automática de la fuente de datos agregando la anotación a continuación.

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

1

Lo mismo para @Anas. Puedo ejecutarlo en Eclipse, pero cuando uso "java -jar ..." ejecutarlo, me da este error. Luego encuentro que mi ruta de compilación de Java es incorrecta, falta la carpeta "src / main / resources", por lo que la aplicación no puede encontrar application.properties. Cuando agregué la carpeta "src / main / resources" en la ruta de compilación de Java, funcionó.

Y, necesita agregar "@PropertySource ({" application.properties "})" en su clase de Aplicación.

Captura de pantalla-1

Captura de pantalla-2


¡Gracias! Llevo cuatro horas intentándolo
Santiago Martí Olbrich

1

Así es como resolví este problema.

En mi caso: tuve que configurar la fuente de datos para el servidor MySQL, que era un servidor externo.

Como todos sabemos, Spring boot tiene la capacidad de configurar automáticamente DataSource para bases de datos integradas.

Por lo tanto, me di cuenta de que tenía que deshabilitar la configuración automática del origen de datos para poder usar mi configuración personalizada.

Como se mencionó anteriormente por muchos, deshabilité la configuración automática de fuente de datos de Spring Boot en application.properties

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

Definí todas las propiedades de configuración de hibernate en un archivo separado: hibernate-mysql.properties

Luego, codifiqué mi propia configuración de hibernación personalizada de la siguiente manera y resolvió el problema.

Mi forma de configurar el DataSource deseado en función de las propiedades en un archivo de propiedad personalizado y llenar su LocalSessionFactoryBean con su fuente de datos y otra configuración de hibernación.

Clase de configuración personalizada de Hibernate:
-------------------------------------------- -------------

Configuración personalizada de hibernación


1

Use esto debajo de la dependencia.

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

No necesitaba una base de datos y recibía este error. Agregué esto y lo arregló.
markthegrea

1

En mi caso, usando IDEA, después de eliminar el outdirectorio, todo vuelve a la normalidad. Simplemente no sé por qué, pero funcionó.


1

Tuve el problema similar y excluir DataSourceAutoConfiguration e HibernateJpaAutoConfiguration resolvió el problema.

He agregado estas dos líneas en mi archivo application.properties y funcionó.

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

1

Ya se publicaron suficientes respuestas. Sin embargo, estoy publicando qué error cometí y cómo lo corregí.

En mi caso, había empaquetado mi proyecto como en pomlugar dejar

pom.xml:

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

Cambiado a:

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

Puede ser útil para alguien con el mismo error.


0

Puede descargar el derby-10.10.1.1.jar desde el repositorio de Maven y colocarlo en su carpeta WEB-INF / lib, como esta Aplicación / WEB-INF / lib / derby-10.10.1.1.jar. Su AnnotationConfigEmbeddedWebApplicationContext incorporado recogerá el controlador de la base de datos y su servidor web comenzará a ejecutarse sin ningún problema :-)


0

Si está utilizando Gradle, incluya el tarro derecho del controlador de la siguiente manera:

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

O si usa Maven, hágalo al estilo Maven, debería resolver su problema.


0

Para cualquiera que llegue a este hilo después de horas de golpearse la cabeza contra la pared. Resolví este error cambiando

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

a

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

en mi archivo schema.sql en el directorio de recursos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.