Spring Boot - невозможно определить класс встроенного драйвера базы данных для типа базы данных NONE


210

Это ошибка, которая выдается при попытке запустить мое веб-приложение:

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

Я считаю, что у меня есть правильная комбинация datanucleus-appengineи datanucleusбанок:

2.1: Требуется DataNucleus 3.1.x (ядро, api-jdo, api-jpa, энхансер). Требуется SDK 1.6.4+. Обратите внимание, что этот выпуск Datanucleus больше не поддерживается проектом DataNucleus.

JPA App Config:

@Configuration
@EnableJpaRepositories("demo.core.entity")
@EnableTransactionManagement
class JpaApplicationConfig {
    private static final Logger logger = Logger
            .getLogger(JpaApplicationConfig.class.getName());
    @Bean
    public AbstractEntityManagerFactoryBean entityManagerFactory() {
        logger.info("Loading Entity Manager...");
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setPersistenceUnitName("transactions-optional");
        return factory;
    }
    @Bean
    public PlatformTransactionManager transactionManager() {
        logger.info("Loading Transaction Manager...");
        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(entityManagerFactory().getObject());
        return txManager;
    }
    @Bean
    public PersistenceExceptionTranslator persistenceExceptionTranslator() {
        return new OpenJpaDialect();
    }
}

Application.java

@Configuration
@ComponentScan
@EnableAutoConfiguration
@RestController
public class Application {

    private static final EntityManagerFactory INSTANCE =
            Persistence.createEntityManagerFactory("transactions-optional");

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

    @RequestMapping("/")
    public String home() {
        return "Hello World";
    }

}

POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="...">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.demohq</groupId>
    <artifactId>demo-boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>demo-boot</name>
    <description>Demo project</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.1.0.BUILD-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-legacy</artifactId>
            <version>1.1.0.BUILD-SNAPSHOT</version>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>net.kindleit</groupId>-->
            <!--<artifactId>gae-runtime</artifactId>-->
            <!--<version>${gae.version}</version>-->
            <!--<type>pom</type>-->
            <!--<scope>provided</scope>-->
        <!--</dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>org.hsqldb</groupId>-->
            <!--<artifactId>hsqldb</artifactId>-->
            <!--<scope>runtime</scope>-->
        <!--</dependency>-->
        <dependency>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-api-labs</artifactId>
            <version>${gae.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-api-stubs</artifactId>
            <version>${gae.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-testing</artifactId>
            <version>${gae.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- DataNucleus -->
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-api-jpa</artifactId>
            <version>${datanucleus.jpa.version}</version>
        </dependency>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-core</artifactId>
            <version>${datanucleus.jpa.version}</version>
        </dependency>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-enhancer</artifactId>
            <version>${datanucleus.jpa.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.appengine.orm</groupId>
            <artifactId>datanucleus-appengine</artifactId>
            <version>${datanucleus.version}</version>
            <!-- Need to exclude the enhancer since it interfere with the enhancer plugin. -->
            <exclusions>
                <exclusion>
                    <groupId>org.datanucleus</groupId>
                    <artifactId>datanucleus-enhancer</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>javax.jdo</groupId>
            <artifactId>jdo-api</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jpa_2.0_spec</artifactId>
            <version>1.1</version>
        </dependency>

        <!-- OpenJPA -->
        <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-persistence</artifactId>
            <version>2.3.0</version>
        </dependency>


    </dependencies>

    <properties>
        <start-class>demo.Application</start-class>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.7</java.version>
        <m2eclipse.wtp.contextRoot>/</m2eclipse.wtp.contextRoot>
        <datanucleus.jpa.version>3.1.1</datanucleus.jpa.version>
        <datanucleus.version>2.1.2</datanucleus.version>
        <gae.version>1.8.8</gae.version>
        <gae.home>${settings.localRepository}/com/google/appengine/appengine-java-sdk/${gae.version}/appengine-java-sdk/appengine-java-sdk-${gae.version}</gae.home>
        <gae.application.version>test</gae.application.version>
        <!--<org.springframework-version>4.0.5.RELEASE</org.springframework-version>-->
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--
            <plugin>
                <groupId>net.kindleit</groupId>
                <artifactId>maven-gae-plugin</artifactId>
                <version>0.9.6</version>
                <dependencies>
                    <dependency>
                        <groupId>net.kindleit</groupId>
                        <artifactId>gae-runtime</artifactId>
                        <version>${gae.version}</version>
                        <type>pom</type>
                    </dependency>
                </dependencies>
            </plugin>
            -->
            <plugin>
                <groupId>com.google.appengine</groupId>
                <artifactId>appengine-maven-plugin</artifactId>
                <version>${gae.version}</version>
                <configuration>
                    <enableJarClasses>false</enableJarClasses>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-release-plugin</artifactId>
                <configuration>
                    <goals>gae:deploy</goals>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat6-maven-plugin</artifactId>
                <version>2.0</version>
                <configuration>
                    <path>/</path>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.datanucleus</groupId>
                <artifactId>maven-datanucleus-plugin</artifactId>
                <version>${datanucleus.jpa.version}</version>
                <configuration>
                    <api>JPA</api>
                    <!--<mappingIncludes>**/entity/*.class</mappingIncludes>-->
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.datanucleus</groupId>
                        <artifactId>datanucleus-core</artifactId>
                        <version>${datanucleus.jpa.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>enhance</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <!-- We can configure our integration server to activate this profile and 
            perform gae:deploy, thus uploading latest snapshot to the http://1.latest.<applicationName>.appspot.com 
            automatically -->
        <profile>
            <id>integration-build</id>
            <properties>
                <gae.application.version>stage</gae.application.version>
            </properties>
        </profile>

        <!-- This profile will activate automatically during release and upload 
            application to the http://2.latest.<applicationName>.appspot.com (We might 
            want to set the 2nd version as our applications Default version to be accessible 
            at http://<applicationName>.appspot.com) -->
        <profile>
            <id>release-build</id>
            <activation>
                <property>
                    <name>performRelease</name>
                    <value>true</value>
                </property>
            </activation>

            <properties>
                <!-- During release, set application version in appengine-web.xml to 
                    2 -->
                <gae.application.version>release</gae.application.version>
            </properties>
        </profile>
    </profiles>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>http://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>http://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

</project>

Интересно, что может отсутствовать в моем приложении? Я следовал инструкциям отсюда Использование Spring Data JPA в Google Appengine


Если я закомментирую @EnableAutoConfiguration, я получу: [INFO] ПРЕДУПРЕЖДЕНИЕ: сбой metricFilter: org.springframework.beans.factory.NoSuchBeanDefinitionException: не определен боб с именем 'metricFilter'
кварки

Вот полный код: bit.ly/1i53oAq
кварки

Ответы:


170

Вы не предоставили Spring Boot достаточно информации для автоматической настройки DataSource. Для этого вам нужно добавить некоторые свойства application.propertiesс spring.datasourceпрефиксом. Взгляни на DataSourceProperties, чтобы увидеть все свойства, которые вы можете установить.

Вам нужно будет указать соответствующий URL и имя класса драйвера:

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

3
я не уверен, что сюда поставить. Я использую DataNucleus + Google App Engine
кварки,

@xybrek Просто добавьте файл application.properties в свое приложение и добавьте в него свойства источника данных.
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
Я сделал то же самое, код работает нормально, когда я запускаю приложение в intellij, но когда я создаю jar и запускаю его, используя java -jar myJar.jarего, я получаю ту же ошибку.
Анас

1
Привет @AndyWilkinson Я сталкиваюсь с той же ошибкой с моим кодом cassandra весенней загрузки. Там я пытаюсь подключиться к Кассандре. И в связи с кассандрой вы не даете spring.datasource.url = … spring.datasource.driver-class-name = …свойства. Поэтому я добавил @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})в свой основной класс. Но после установки этого сейчас я получаю ошибку 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.. Пожалуйста помоги.
kumarhimanshu449

113

Если вы хотите использовать встроенную базу данных H2 из Spring Boot starter, добавьте приведенную ниже зависимость в ваш pom-файл.

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

Но, как упоминалось в комментариях, встроенная база данных H2 хранит данные в памяти и не хранит их постоянно.


2
У меня была такая же проблема с spring-boot-starter-jdbc. Попробовал это предложение, и оно исправило мою проблему.
bluecollarcoder

3
Это не настоящее решение. H2 не будет постоянно сохранять данные, насколько я знаю.
SARose

10
@Sarose - Конечно, не будет! Это база данных "в памяти".
user672009 30.09.15

1
@ user672009, неверно. H2 - это не только база данных в памяти. См. H2database.com/html/features.html . С учетом сказанного, это плохое решение проблемы.
Джейсон Николс

5
Я пытаюсь создать чье-то приложение и получаю ошибку «Не удается определить ... для типа базы данных НЕТ». Попробовав другие решения, я пробую это, и оно работает. Приложение было создано для использования двух БД, настроенных по свойствам. Я настроил их, но получил эту ошибку. После добавления зависимости H2 больше ошибок нет. Приложение использует другие базы данных, которые я указал, ничто не идет к H2, AFAICT. Может быть побочным эффектом весенней загрузки или проблемой в дизайне этого приложения, но для его запуска требуется H2. Так как у других есть эта проблема, это не может быть только это приложение.
LS

87

Я бы такую ​​же проблему, и исключая DataSourceAutoConfiguration, решил проблему.

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

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

3
Спасибо! может настроить его application.properties, какspring.main.web-environment=false
zhuguowei

1
Я нашел @EnableAutoConfigurationв классе, отличном от SpringBootApplication, и там тоже пришлось добавить исключение. TBH, мне, вероятно, не нужно @EnableAutoConfigurationтам в первую очередь: /
cs94njw

63

Это сработало для меня (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 {

Исключить оба класса.

Не работал с

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

7
Это для людей, которые не понимают, почему они «загадочно» требуют доступа к базе данных в своем приложении, когда они не должны (например, когда доступ к базе данных обрабатывается каким-либо другим приложением, а это просто «клиент»).
cst1992

31

Можете добавить

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

в ваш application.propertiesфайл.


2
Это должен быть принятый ответ, если вам не нужен источник данных jdbc.
Фаррух Наджми

Это особенно полезно, когда у вас есть несколько профилей, и один из них находится в памяти.
Доу Джонсон

Для меня, мне нужно exluse HibernateJpaAutoConfiguration также для того , чтобы работы: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
AbdelRahmane

20

Теперь, когда я посмотрю поближе, я думаю, что проблема источника данных - красная сельдь. Автоконфигурация Hibernate в Boot запускается, и именно поэтому требуется источник данных. Hibernate находится на пути к классам, потому что у вас есть зависимость, от spring-boot-starter-data-jpaкоторой зависит hibernate-entitymanager.

Обновите свой spring-boot-starter-data-jpa зависимость, чтобы исключить 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
Ошибка все та же :-(
кварки

Вы уверены, что правильно применили исключение? MVN зависимость: дерево поможет вам проверить. После исключения я решил проблему с источником данных (теперь я вижу «Тип demo.core.entity.Resource не является известным управляемым типом», но это отдельная проблема)
Энди Уилкинсон

Привет, Энди, это значит, что ты проверил реальный проект, который я опубликовал? выглядит многообещающе
кварки

1
Да, это было с проектом, который вы опубликовали. Единственное изменение, которое я сделал, - добавление исключения Hibernate, как описано выше.
Энди Уилкинсон

Круто, кажется, что вы скомпилировали ветку master или ветку JPA?
кварки

14

Из руководства к весне .

Spring Boot может автоматически настраивать встроенные базы данных H2, HSQL и Derby. Вам не нужно указывать URL-адреса подключения, просто включите зависимость сборки от встроенной базы данных, которую вы хотите использовать.

Например, типичные зависимости POM были бы:

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

Для меня исключение зависимости spring-boot-starter-data-jpa и просто использование зависимости spring-boot-starter-jdbc работало как чудо, если бы в качестве зависимостей был включен h2 (или hsqldb).


9

Spring boot будет искать свойства данных в файле application.properties.

Пожалуйста, определите это в application.properties или yml файле

application.properties

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

Если вам нужна собственная конфигурация, вы можете установить собственный профиль и использовать значения источника данных при создании компонента.


7

Я не знаю, если уже слишком поздно, чтобы ответить. Я мог бы решить эту проблему, исключив DataSourceAutoConfiguration из весенней загрузки.


3
Документация по exluding здесь: docs.spring.io/spring-boot/docs/current/reference/html/...
Shorn

Не слишком поздно для меня. Это был самый простой способ обойти проблему для моего проекта.
Джефф Френч

5

Я столкнулся с этим исключением, когда делал API для ElasticSearch, используя Spring Data. Я сделал следующее, и это сработало.

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

3

У меня было две зависимости с groupId org.springframework.data, затем я удалил jpa и сохранил только mongodb, и это сработало!

<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

Я решаю свою проблему, просто добавив @AutoConfigureTestDatabase (replace = Replace.NONE)

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

}

2

Я получил сообщение об ошибке в заголовке o.s.b.d.LoggingFailureAnalysisReporterвместе с сообщением «Приложение не удалось запустить». Оказалось, что я не добавил -Dspring.profiles.active=devсвою конфигурацию отладки Eclipse, поэтому у меня не было активного профиля.


1
Точно моя проблема. Добавление флага к аргументам VM конфигурации отладки ( Run -> Debug configurations... -> Maven build -> [build name] -> JRE -> VM arguments)
sshow

2

Я тоже столкнулся с той же проблемой.

Cannot determine embedded database driver class for database type NONE.

В моем случае удаление файла JAR из репозитория, соответствующего базе данных, решает проблему. В хранилище был поврежденный сосуд, который вызывал проблему.


1

В моем случае я поместил в свой pom зависимость maven для org.jasig.cas, которая вызвала зависимость hibernate и заставила Spring Boot искать источник данных для автоматической настройки персистентности hibernate. Я решил это, добавив зависимость maven для com.h2database, как было предложено пользователем672009. Спасибо, парни!


1

Так как это одна из первых тем, возвращенных в Google для этой ошибки, я опубликую то, что я сделал, если кто-то столкнется с той же проблемой .. Я не хотел исключать DataSourceAutoConfiguration ни использовать базу данных памяти ..

В моем случае я устанавливал параметры, как сказали другие респонденты, но application.properties файл находился не в той папке.

Поэтому, если ничего подобного не работает, проверьте, находится ли файл внутри src/main/resources! В моем случае это было внутриsrc/main/resources/static


1

Ответ очень прост, SpringBoot будет искать драйвер базы данных Embeddable. Если вы не сконфигурировали ни одну из ваших конфигураций в форме XML или аннотаций, он выдаст это исключение. Внесите изменения в свою аннотацию следующим образом

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
это исключит DataSourceAutoConfiguration. И завершение Perfect Simple Coding будет работать, если вы правильно настроите свой класс.

    @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

Делать ниже работает.

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

Но если я хотел иметь источник данных, я не должен делать вышеуказанную конфигурацию. Ниже ссылка говорит, что нам нужно все свойства в файле application.properties. Все свойства должны начинаться с spring.datasource.*

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


1

Если вам действительно нужна «spring-boot-starter-data-jpa» в качестве зависимости вашего проекта и в то же время вы не хотите, чтобы ваше приложение получало доступ к какой-либо базе данных, вы можете просто исключить классы автоконфигурации

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

1

Я перепробовал все перечисленные выше вещи, но не смог решить проблему. Я использую SQLite, и мой файл SQLite находился в каталоге ресурсов.

а) Настройка сделана для IDE

Мне нужно вручную добавить ниже строки в файле .classpath моего проекта.

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

После этого я обновил и очистил проект из MenuBar вверху. как Проект-> Очистить-> Имя моего проекта.

После этого я запускаю проект и проблема решена.

application.properties для моего проекта

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

б) Настройка завершена, если Jar-развертывание выдает ту же ошибку

Вам нужно добавить следующие строки в ваш pom.xml

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

Может быть, это может кому-то помочь.


1

если у вас нет базы данных в вашем приложении, просто отключите автоконфигурирование источника данных, добавив ниже аннотацию.

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

1

То же самое с @Anas. Я могу запустить его в Eclipse, но когда я использую «java -jar ...», запустите его, это даст мне эту ошибку. Затем я обнаружил, что мой путь сборки Java неверен, в нем отсутствует папка «src / main / resources», поэтому приложение не может найти application.properties. Когда я добавил папку «src / main / resources» в путь сборки Java, это сработало.

И вам нужно добавить "@PropertySource ({" application.properties "})" в ваш класс приложения.

Скриншот-1

Скриншот-2


Спасибо! Я пытался четыре часа
Сантьяго Марти Ольбрих

1

Вот как я решил эту проблему.

В моем случае: мне пришлось настроить источник данных для MySQL Server, который был внешним сервером.

Как мы все знаем, Spring boot имеет возможность автоматической настройки DataSource для встроенных баз данных.

Таким образом, я понял, что мне пришлось отключить автоконфигурацию источника данных, чтобы использовать мою пользовательскую конфигурацию.

Как уже упоминалось выше, я отключил автоматическую настройку источника данных Spring Boot в application.properties

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

Я определил все свойства конфигурации hibernate в отдельном файле: hibernate-mysql.properties

Затем я кодировал свою собственную пользовательскую конфигурацию Hibernate следующим образом, и это решило проблему.

Мой способ настроить требуемый DataSource на основе свойств в файле пользовательских свойств и заполнить ваш LocalSessionFactoryBean источником данных и другой конфигурацией гибернации.

Класс пользовательской конфигурации Hibernate: -
-------------------------------------------- -------------

Пользовательская конфигурация Hibernate


1

Используйте эту зависимость ниже.

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

Мне не нужна была база данных, и я получал эту ошибку. Я добавил это, и это исправило это.
markthegrea

1

В моем случае, используя IDEA, после удаления outдиректории, все возвращается на круги своя. Я просто не знаю почему, но это сработало.


1

Я бы схожая проблема, и исключая DataSourceAutoConfiguration и HibernateJpaAutoConfiguration, решил проблему.

Я добавил эти две строки в мой файл application.properties, и это сработало.

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

1

Уже достаточно ответов было опубликовано. Тем не менее, я пишу, какую ошибку я сделал и как я ее исправил.

В моем случае, я упаковал свой проект как pomвместоjar

pom.xml:

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

Изменился на:

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

Это может помочь кому-то с той же ошибкой.


0

Вы можете скачать derby-10.10.1.1.jar из репозитория Maven и поместить его в папку WEB-INF / lib, например, в это приложение / WEB-INF / lib / derby-10.10.1.1.jar. Ваш встроенный AnnotationConfigEmbeddedWebApplicationContext подберет драйвер базы данных, и ваш веб-сервер начнет работать без проблем :-)


0

Если вы используете Gradle, включите правую банку с драйвером, как показано ниже:

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

Или, если вы используете Maven, сделайте это в стиле Maven, это должно решить вашу проблему.


0

Всем, кто придет к этой теме после нескольких часов стука головой о стену. Я решил эту ошибку, изменив

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

в

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

в моем файле schema.sql в каталоге ресурсов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.