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 (core, api-jdo, api-jpa, посилення). Потрібна SDK 1.6.4+. Зверніть увагу, що цей випуск Datanucleus більше не підтримується проектом DataNucleus

Налаштування програми 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>

Цікаво, що може бути відсутнім у моєму додатку? Я дотримувався інструкції звідси, використовуючи Spring Data JPA на Google Appengine


Якщо я коментую @EnableAutoConfiguration, я отримую: [ІНФОРМАЦІЯ] ПОПЕРЕДЖЕННЯ: невдалий metricFilter: org.springframework.beans.factory.NoSuchBeanDefinitionException: Не визначено квасоля з назвою "metricFilter"
кварки

Ось повний код: bit.ly/1i53oAq
кварків

У моєму випадку це було Spring-boot-starter-data-jpa
Anand Rockzz

Відповіді:


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, але коли я створюю банку і запускаю її за допомогою, 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, додайте нижчу залежність до вашого файла пам’яті.

    <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 - Звичайно, це не буде! Це база даних "у пам'яті".
користувач672009

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.
Фаррух Наймі

Це особливо корисно, коли у вас є кілька профілів, і один з них - це пам'ять.
Doe Johnson

Для мене, мені потрібно exluse HibernateJpaAutoConfiguration також для того , щоб працювати: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
AbdelRahmane

20

Тепер, коли я придивляюся ближче, я думаю, що проблема DataSource - це оселедець. Запускається автоматична конфігурація Bober Hibernate, і саме це викликає необхідність використання DataSource. Зимова сплячка на уроці, тому що ти маєш залежність від того, на spring-boot-starter-data-jpaкого втягуєшся hibernate-entitymanager.

Оновіть свою spring-boot-starter-data-jpaзалежність, щоб виключити сплячий режим:

<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 залежність: дерево допоможе вам перевірити. З виключенням на місці проблема DataSource для мене пішла (я тепер бачу "Введіть demo.core.entity.Resource - не відомий керований тип", але це окрема проблема)
Енді Вілкінсон

Привіт Енді, це означає, що ти перевірив фактичний проект, який я розмістив? виглядає перспективно
кварки

1
Так, це було з опублікованим вами проектом. Єдиною зміною, яку я внесла, було додавання виключення зі сну, як описано вище.
Енді Вілкінсон

Класно, здається, те, що ви склали, було головним відділенням, або відділенням 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

Весняне завантаження шукатиме властивості datasoure у файлі application.properties.

Будь ласка, визначте це у application.properties або yml-файлі

застосування.властивості

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

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


7

Я не знаю, якщо відповісти занадто пізно. Я міг би вирішити цю проблему, виключивши DataSourceAutoConfiguration з весняного завантаження.


3
Документація щодо виключення знайдена тут: 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 (замінити = Замінити.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

У моєму випадку я поставив це великою залежністю для org.jasig.cas в моєму пом, що викликало сплячу залежність і спричинило Spring Boot шукати джерело даних для автоматичного налаштування стійкості в сплячку. Я вирішив це, додавши залежність maven залежності com.h2database, як запропонував користувач672009. Спасибі, хлопці!


1

Оскільки це одна з перших тем, повернених у Google за цю помилку, я опублікую те, що робив у випадку, якщо хтось стикається з тією ж проблемою .. Я не хотів виключати DataSourceAutoConfigurationні використання бази даних пам’яті ..

У моєму випадку я встановлював параметри так, як сказали інші реплікатори, але application.propertiesфайл знаходився всередині неправильної папки .. lol

Тож, якщо нічого подібного не працює, перевірте, чи файл знаходиться всередині src/main/resources! У моєму випадку це було всерединіsrc/main/resources/static


1

Відповідь дуже проста, SpringBoot шукатиме вбудований драйвер бази даних. Якщо ви не налаштували жодну з ваших конфігурацій у формі XML або Анотацій, це викине це виключення. Зробіть зміни в примітці так

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
це виключає налаштування DataSourceAutoConfiguration. І завершення ідеального кодування було б спрацьовим, якщо ви правильно налаштували свій клас.

    @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})

Але якщо я хотів мати даніSource, я не повинен робити вищевказану конфігурацію. Наведене нижче посилання говорить про те, що нам потрібні всі властивості у файлі 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 був у каталозі ресурсів.

a) Налаштування зроблено для 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

b) Налаштування зроблено, якщо розгортання 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 / ресурси", тому програма не може знайти application.properties. Коли я додаю папку "src / main / ресурси" в шлях збірки Java, вона спрацювала.

І вам потрібно додати "@PropertySource ({" application.properties "})" у свій клас програми.

Скріншот-1

Скріншот-2


Дякую! Я пробував чотири години
Сантьяго Марті

1

Ось як я вирішив цю проблему.

У моєму випадку: мені довелося налаштувати джерело даних для MySQL Server, який був зовнішнім сервером.

Як ми всі знаємо, Spring boot має можливість автоматичної настройки DataSource для вбудованих баз даних.

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

Як вже згадувалося багатьма, я відключив автоматичну конфігурацію DataSource Spring Boot на application.properties

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

Я визначив усі властивості конфігурації в сплячому режимі в окремому файлі: hibernate-mysql.properties

Потім я зашифрував власну власну конфігурацію сну в такий спосіб, і це вирішило проблему.

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

Спеціальний клас конфігурації у сплячому режимі: -
-------------------------------------------- -------------

Спеціальна конфігурація в сплячому режимі


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

Ви можете завантажити дербі-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.