Dies ist der Fehler, der beim Ausführen meiner Web-App ausgelöst wird:
[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)
Ich glaube, ich habe die richtige Kombination von datanucleus-appengine
- und datanucleus
-Gläsern:
2.1: Erfordert DataNucleus 3.1.x (Core, Api-Jdo, Api-Jpa, Enhancer). Erfordert SDK 1.6.4+ Beachten Sie, dass diese Version von Datanucleus nicht mehr .__ ist. unterstützt durch das DataNucleus-Projekt
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>
Ich frage mich, was in meiner App fehlen könnte. Ich habe die Anweisungen von hier aus befolgt Spring Data JPA in Google Appengine verwenden
Sie haben Spring Boot nicht genügend Informationen zur automatischen Konfiguration einer DataSource
zur Verfügung gestellt. Dazu müssen Sie einige Eigenschaften zu application.properties
mit dem Präfix spring.datasource
hinzufügen. Schauen Sie sich DataSourceProperties an, um alle Eigenschaften anzuzeigen, die Sie festlegen können.
Sie müssen den entsprechenden URL- und Treiberklassennamen angeben:
spring.datasource.url = …
spring.datasource.driver-class-name = …
Wenn Sie die eingebettete H2-Datenbank vom Spring Boot-Starter aus verwenden möchten, fügen Sie der Pom-Datei die folgende Abhängigkeit hinzu.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.156</version>
</dependency>
Wie in Kommentaren erwähnt, speichert die eingebettete H2-Datenbank Daten im Speicher und speichert sie nicht dauerhaft.
Ich hätte das gleiche Problem und das Ausschließen der DataSourceAutoConfiguration löste das Problem.
@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class RecommendationEngineWithCassandraApplication {
public static void main(String[] args) {
SpringApplication.run(RecommendationEngineWithCassandraApplication.class, args);
}
}
Das hat für mich funktioniert (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 {
Beide Klassen ausschließen.
Es hat nicht funktioniert
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
Du kannst hinzufügen
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
in Ihre application.properties
-Datei.
Jetzt, wo ich genauer hinschaue, denke ich, dass das DataSource-Problem ein Hering ist. Die Hibernate-Autokonfiguration von Boot wird ausgelöst, und dies führt dazu, dass eine DataSource erforderlich ist. Der Ruhezustand befindet sich auf dem Klassenpfad, da Sie eine Abhängigkeit von spring-boot-starter-data-jpa
haben, was hibernate-entitymanager
zieht.
Aktualisieren Sie Ihre spring-boot-starter-data-jpa
-Abhängigkeit, um den Ruhezustand auszuschließen:
<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>
Aus dem Spring Handbuch .
Spring Boot kann eingebettete H2-, HSQL- und Derby-Datenbanken automatisch konfigurieren. Sie müssen keine Verbindungs-URLs angeben. Fügen Sie einfach eine Build-Abhängigkeit zur eingebetteten Datenbank hinzu, die Sie verwenden möchten.
Typische POM-Abhängigkeiten wären zum Beispiel:
<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>
Wenn ich die Spring-Boot-Starter-data-jpa-Abhängigkeit ausließ und nur die Spring-Boot-Starter-jdbc-Abhängigkeit verwendete, funktionierte es wie ein Zauber, solange ich h2 (oder hsqldb) als Abhängigkeiten hatte.
Spring Boot sucht nach Datasoure-Eigenschaften in der Datei application.properties.
Bitte definieren Sie es in application.properties oder yml-Datei
application.properties
spring.datasource.url=xxx
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driver-class-name=xxx
Wenn Sie eine eigene Konfiguration benötigen, können Sie Ihr eigenes Profil festlegen und die Datenquellenwerte während der Bean-Erstellung verwenden.
Ich weiß nicht, ob es zu spät ist, um zu antworten. Ich könnte dieses Problem lösen, indem ich DataSourceAutoConfiguration vom Spring Boot ausschließe.
Ich war mit dieser Ausnahme konfrontiert, als ich APIs für ElasticSearch mit Spring Data erstellte. Ich habe folgendes getan und es hat funktioniert.
@SpringDataApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
Ich hatte zwei Abhängigkeiten mit groupId von org.springframework.data, dann entfernte ich jpa und behielt nur mongodb, und es funktionierte!
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
Ich löse mein Problem durch Hinzufügen von @AutoConfigureTestDatabase (replace = Replace.NONE)
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace=Replace.NONE)
public class TestClienteRepository {
}
Ich habe die Fehlermeldung im Titel von o.s.b.d.LoggingFailureAnalysisReporter
zusammen mit der Meldung "APPLICATION FAILED TO START" erhalten. Es stellte sich heraus, dass ich -Dspring.profiles.active=dev
nicht zu meiner Eclipse-Debug-Konfiguration hinzugefügt hatte. Ich hatte also kein aktives Profil.
Auch ich stand vor demselben Problem.
Cannot determine embedded database driver class for database type NONE.
In meinem Fall löst das Löschen der JAR-Datei aus dem Repository entsprechend der Datenbank das Problem. Im Repository war ein beschädigtes Glas vorhanden, das das Problem verursachte.
In meinem Fall habe ich eine große Abhängigkeit von org.jasig.cas in meinem Pom eingefügt, die eine Abhängigkeit vom Ruhezustand auslöste und dazu führte, dass Spring Boot nach einer Datenquelle suchte, um die Persistenz des Ruhezustands automatisch zu konfigurieren com.h2database Maven-Abhängigkeit, wie von user672009 vorgeschlagen. Danke Leute!
Da dies eines der ersten in google zurückgegebenen Themen für diesen Fehler ist, werde ich veröffentlichen, was ich getan habe, falls jemand das gleiche Problem hat ... Ich wollte DataSourceAutoConfiguration
nicht ausschließen und keine Speicherdatenbank verwenden.
In meinem Fall habe ich die Parameter eingestellt, wie die anderen Replier sagten, aber die application.properties
-Datei befand sich im falschen Ordner .. lol
Falls dies nicht funktioniert, prüfen Sie, ob sich die Datei in src/main/resources
befindet! In meinem Fall war es in src/main/resources/static
Wenn Sie wirklich "Spring-Boot-Starter-Data-JPA" als Projektabhängigkeit benötigen und gleichzeitig nicht möchten, dass Ihre App auf eine Datenbank zugreifen kann, können Sie Autokonfigurationsklassen einfach ausschließen
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
Verwenden Sie diese Abhängigkeit unten.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Unten arbeiten geht.
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
Wenn ich jedoch DataSource haben wollte, sollte ich die obige Konfiguration nicht durchführen. Der untenstehende Link sagt, dass wir alle Eigenschaften in der Datei application.properties benötigen. Alle Eigenschaften sollten mit spring.datasource.*
beginnen.
http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
Die Antwort ist sehr einfach. SpringBoot sucht nach eingebetteten Datenbanktreibern. Wenn Sie keine Konfiguration in Form von XML oder Anmerkungen vorgenommen haben, wird diese Ausnahme ausgelöst. Nehmen Sie die Änderungen in Ihrer Anmerkung folgendermaßen vor
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
@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);
}
}
</ Code>
Ich habe alle oben genannten Dinge ausprobiert, konnte das Problem jedoch nicht lösen. Ich verwende SQLite und meine SQLite-Datei befand sich im Ressourcenverzeichnis.
a) Einrichtung für IDE durchgeführt
Ich muss in der .classpath-Datei meines Projekts manuell folgende Zeilen hinzufügen.
<classpathentry kind="src" path="resources"/>
<classpathentry kind="output" path="target/classes"/>
Danach habe ich das Projekt in MenuBar oben aktualisiert und gereinigt. wie Projekt-> Reinigen-> Mein Projektname.
Danach führe ich das Projekt durch und löste das Problem.
application.properties für mein Projekt ist
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) Einrichtung erfolgt, wenn die Jar-Bereitstellung denselben Fehler auslöst
Sie müssen der pom.xml folgende Zeilen hinzufügen
<build>
<resources>
<resource>
<directory>resources</directory>
<targetPath>${project.build.outputDirectory}</targetPath>
<includes>
<include>application.properties</include>
</includes>
</resource>
</resources>
</build>
Vielleicht kann es jemandem helfen.
In meinem Fall mit IDEA nach dem Entfernen des Verzeichnissesout
alles wieder normal. Ich weiß nur nicht warum, aber es hat geklappt.
wenn Sie keine Datenbank in Ihrer Anwendung haben, deaktivieren Sie einfach die automatische Konfiguration der Datenquelle, indem Sie die folgende Anmerkung hinzufügen.
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
Es wurden bereits genug Antworten gepostet. Ich poste jedoch, welchen Fehler ich gemacht habe und wie ich ihn korrigiert habe.
In meinem Fall hatte ich mein Projekt als pom
anstelle von jar
gepackt.
pom.xml:
...
<packaging>pom</packaging>
...
Gewechselt zu:
...
<packaging>jar</packaging>
...
Es kann für jemanden mit dem gleichen Fehler hilfreich sein.
Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie die folgende Option Maven -> Projekt aktualisieren. Das hat mein Problem gelöst.
Im Allgemeinen tritt ein solcher Fehler auf, wenn Sie JPA verwendet haben und vergessen, eine Datenbankverbindung hinzuzufügen. Daher müssen Sie in Ihrer Anwendung datenbankbezogene Abhängigkeiten hinzufügen.
Wenn Sie JPA verwenden möchten, ohne eine externe Datenbank anzuschließen, fügen Sie hsqldb in Ihre Abhängigkeit ein.
Ich hoffe das hilft!
So habe ich dieses Problem gelöst.
In meinem Fall: Ich musste die Datenquelle für MySQL Server konfigurieren, einen externen Server.
Wie wir alle wissen, kann Spring Boot DataSource für eingebettete Datenbanken automatisch konfigurieren.
So wurde mir klar, dass ich die automatische Konfiguration der Datenquelle deaktivieren musste, um meine benutzerdefinierte Konfiguration verwenden zu können.
Wie von vielen schon erwähnt, habe ich die automatische DataSource-Konfiguration von Spring Boot unter application.properties deaktiviert
spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Ich habe alle Eigenschaften für den Ruhezustand in einer separaten Datei definiert: Hibernate-mysql.properties
Dann habe ich meine eigene angepasste Ruhezustandskonfiguration auf folgende Weise codiert und das Problem behoben.
So können Sie die gewünschte DataSource basierend auf Eigenschaften in einer benutzerdefinierten Eigenschaftendatei konfigurieren und Ihre LocalSessionFactoryBean mit Ihrer Datenquelle und einer anderen Ruhezustandskonfiguration auffüllen.
Hibernate-Klasse für benutzerdefinierte Konfiguration: -
----------------------------------------- ------------
Dasselbe gilt für @Anas. Ich kann es in Eclipse ausführen, aber wenn ich "Java -jar ..." verwende, führe es aus, es gibt mir diesen Fehler. Dann finde ich, dass mein Java-Build-Pfad falsch ist, es fehlt der Ordner „src/main/resources“, sodass die Anwendung application.properties nicht finden kann. Wenn ich den Ordner "src/main/resources" im Java-Erstellungspfad hinzufüge, funktionierte es.
Und Sie müssen "@PropertySource ({" application.properties "})" in Ihrer Application-Klasse hinzufügen.
C:\Users\admin\.IntelliJIdea2018.1\system\compile-server
löschen
Ich hatte das ähnliche Problem und das Ausschließen der DataSourceAutoConfiguration und HibernateJpaAutoConfiguration löste das Problem.
Ich habe diese beiden Zeilen in meine Datei application.properties eingefügt, und es hat funktioniert.
> spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
> spring.autoconfigure.exclude[1]=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
Wenn Sie Gradle verwenden, fügen Sie das rechte Glas des Treibers wie folgt hinzu:
compile("org.mongodb:mongo-Java-driver:3.3.0")
Wenn Sie Maven verwenden, tun Sie dies im Maven-Stil. Das Problem sollte dadurch gelöst werden.
Sie können die derby-10.10.1.1.jar aus dem Maven Repository herunterladen und in Ihrem Ordner WEB-INF/lib ablegen, z Ihr eingebetteter AnnotationConfigEmbeddedWebApplicationContext nimmt den Datenbanktreiber auf und Ihr Webserver wird ohne Probleme ausgeführt :-)
Für jeden, der nach stundenlangem Kopfschlagen gegen eine Wand zu diesem Faden kommt. Ich habe diesen Fehler durch Ändern gelöst
create table `group`(
id char(19) primary key
);
zu
create table if not exists `group`(
id char(19) primary key
);
in meiner schema.sql-Datei im Ressourcenverzeichnis.