Voici l'erreur générée lors de la tentative d'exécution de mon application Web:
[INFO] WARNING: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.:
[INFO] org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.
[INFO] at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.getDriverClassName(DataSourceProperties.Java:91)
[INFO] at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource(DataSourceAutoConfiguration.Java:100)
[INFO] at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[INFO] at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
[INFO] at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
[INFO] at Java.lang.reflect.Method.invoke(Method.Java:606)
[INFO] at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.Java:115)
[INFO] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.Java:166)
[INFO] at org.springframework.beans.factory.support.ConstructorResolver$3.run(ConstructorResolver.Java:580)
[INFO] at Java.security.AccessController.doPrivileged(Native Method)
[INFO] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.Java:577)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.Java:1094)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.Java:989)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:504)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:475)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:304)
[INFO] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:228)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:300)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:195)
[INFO] at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.Java:1017)
[INFO] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.Java:960)
[INFO] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.Java:858)
[INFO] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.Java:480)
[INFO] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.Java:87)
[INFO] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.Java:289)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.Java:1185)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:537)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:475)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:304)
[INFO] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:228)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:300)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:195)
[INFO] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.Java:370)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.Java:1094)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.Java:989)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:504)
[INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:475)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:304)
[INFO] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:228)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:300)
[INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:195)
[INFO] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.Java:973)
[INFO] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:750)
[INFO] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:482)
[INFO] at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:683)
[INFO] at org.springframework.boot.SpringApplication.run(SpringApplication.Java:313)
[INFO] at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.Java:142)
[INFO] at org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener.initWebApplicationContext(SpringBootContextLoaderListener.Java:60)
[INFO] at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.Java:106)
[INFO] at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.Java:548)
[INFO] at org.mortbay.jetty.servlet.Context.startContext(Context.Java:136)
[INFO] at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.Java:1250)
[INFO] at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.Java:517)
[INFO] at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.Java:467)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
[INFO] at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.Java:130)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
[INFO] at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.Java:130)
[INFO] at org.mortbay.jetty.Server.doStart(Server.Java:224)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
[INFO] at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.Java:249)
[INFO] at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.Java:306)
[INFO] at com.google.appengine.tools.development.AutomaticInstanceHolder.startUp(AutomaticInstanceHolder.Java:26)
[INFO] at com.google.appengine.tools.development.AbstractModule.startup(AbstractModule.Java:79)
[INFO] at com.google.appengine.tools.development.Modules.startup(Modules.Java:88)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl.doStart(DevAppServerImpl.Java:254)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl.access$000(DevAppServerImpl.Java:47)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.Java:212)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.Java:210)
[INFO] at Java.security.AccessController.doPrivileged(Native Method)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.Java:210)
[INFO] at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.Java:277)
[INFO] at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.Java:48)
[INFO] at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.Java:219)
[INFO] at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.Java:210)
Je pense avoir la bonne combinaison de bocaux datanucleus-appengine
et datanucleus
:
2.1: Nécessite DataNucleus 3.1.x (core, api-jdo, api-jpa, enhancer). Nécessite le SDK 1.6.4+ Notez que cette version de Datanucleus n’est plus pris en charge par le projet DataNucleus
Configuration de l'application 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>
Je me demande ce qui pourrait manquer dans mon application? J'ai suivi les instructions à partir d'ici Utilisation de Spring Data JPA sur Google Appengine
Vous n'avez pas fourni suffisamment d'informations à Spring Boot pour configurer automatiquement une DataSource
. Pour ce faire, vous devez ajouter des propriétés à application.properties
avec le préfixe spring.datasource
. Examinez DataSourceProperties pour voir toutes les propriétés que vous pouvez définir.
Vous devrez fournir l'URL et le nom de la classe de pilote appropriés:
spring.datasource.url = …
spring.datasource.driver-class-name = …
Si vous souhaitez utiliser la base de données H2 intégrée à partir du démarreur Spring Boot, ajoutez la dépendance ci-dessous à votre fichier pom.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.156</version>
</dependency>
Mais comme mentionné dans les commentaires, la base de données H2 intégrée conserve les données en mémoire et ne les stocke pas de manière permanente.
J'aurais le même problème et l'exclusion de DataSourceAutoConfiguration a résolu le problème.
@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class RecommendationEngineWithCassandraApplication {
public static void main(String[] args) {
SpringApplication.run(RecommendationEngineWithCassandraApplication.class, args);
}
}
Cela a fonctionné pour moi (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 {
Exclure les deux classes.
Cela n'a pas fonctionné avec
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
Vous pouvez ajouter
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
dans votre fichier application.properties
.
Maintenant que je regarde de plus près, je pense que le problème de la source de données est une source de confusion. La configuration automatique de Hibernate de Boot est en train de se déclencher et c'est pourquoi un DataSource est requis. Hibernate est sur le chemin de classe parce que vous avez une dépendance sur spring-boot-starter-data-jpa
qui extrait hibernate-entitymanager
.
Mettez à jour votre dépendance spring-boot-starter-data-jpa
pour exclure 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>
À partir du Manuel Spring .
Spring Boot peut configurer automatiquement les bases de données H2, HSQL et Derby intégrées. Vous n'avez pas besoin de fournir d'URL de connexion, il vous suffit d'inclure une dépendance de construction à la base de données intégrée que vous souhaitez utiliser.
Par exemple, les dépendances POM typiques seraient:
<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>
Pour moi, laisser de côté la dépendance spring-boot-starter-data-jpa et utiliser simplement la dépendance spring-boot-starter-jdbc fonctionnait à merveille, du moment que h2 (ou hsqldb) était inclus en tant que dépendances.
Le démarrage du printemps cherchera des propriétés datasoure dans le fichier application.properties.
Veuillez le définir dans le fichier application.properties ou yml
application.properties
spring.datasource.url=xxx
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driver-class-name=xxx
Si vous avez besoin de votre propre configuration, vous pouvez définir votre propre profil et utiliser les valeurs de la source de données lors de la création du bean.
Je ne sais pas s'il est trop tard pour répondre. Je pourrais résoudre ce problème en excluant DataSourceAutoConfiguration à partir du printemps.
J'ai fait face à cette exception alors que je réalisais des API pour ElasticSearch en utilisant Spring Data. J'ai fait ce qui suit et cela a fonctionné.
@SpringDataApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
J'ai eu deux dépendances avec groupId de org.springframework.data, puis j'ai supprimé jpa et gardé mongodb uniquement, et cela a fonctionné!
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
Je résous mon problème en ajoutant simplement @AutoConfigureTestDatabase (replace = Replace.NONE)
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace=Replace.NONE)
public class TestClienteRepository {
}
J'ai reçu le message d'erreur dans le titre de o.s.b.d.LoggingFailureAnalysisReporter
avec le message "APPLICATION FAILED TO START". Il s'est avéré que je n'avais pas ajouté -Dspring.profiles.active=dev
à ma configuration de débogage Eclipse, je n'avais donc aucun profil actif.
Moi aussi j'ai fait face au même problème.
Cannot determine embedded database driver class for database type NONE.
Dans mon cas, la suppression du fichier jar du référentiel correspondant à la base de données corrige le problème. Un pot corrompu était présent dans le référentiel, ce qui causait le problème.
Dans mon cas, j’ai mis une dépendance maven pour org.jasig.cas dans mon pom qui a déclenché une dépendance hibernate et qui a poussé Spring Boot à rechercher une source de données pour la configuration automatique de la persistance hibernate . dépendance maven com.h2database comme suggéré par user672009. Merci les gars!
Comme il s’agit de l’un des premiers sujets renvoyés dans Google pour cette erreur, je publierai ce que j’avais fait au cas où quelqu'un rencontrerait le même problème ... Je ne voulais pas exclure DataSourceAutoConfiguration
ni utiliser une base de données en mémoire.
Dans mon cas, je définissais les paramètres comme le disaient les autres réplicateurs, mais le fichier application.properties
était dans le mauvais dossier. Lol
Donc, si rien ne fonctionne de la sorte, vérifiez si le fichier est à l'intérieur de src/main/resources
! Dans mon cas, c'était à l'intérieur de src/main/resources/static
Si vous avez vraiment besoin de "spring-boot-starter-data-jpa" en tant que dépendance du projet et si vous ne souhaitez pas permettre à votre application d'accéder à une base de données, vous pouvez simplement exclure les classes de configuration automatique.
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
Utilisez cette dépendance ci-dessous.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Faire ci-dessous fonctionne.
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
Mais si je voulais avoir DataSource, je ne devrais pas faire la configuration ci-dessus. Le lien ci-dessous indique que nous avons besoin de toutes les propriétés du fichier application.properties. Toutes les propriétés doivent commencer par spring.datasource.*
http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
La réponse est très simple, SpringBoot recherchera un pilote de base de données incorporable. Si vous ne configurez aucune configuration sous forme XML ou d'annotations, cette exception sera levée. .
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
ceci exclura la DataSourceAutoConfiguration . Et l'achèvement de Perfect Simple Coding fonctionnerait si vous avez correctement configuré votre classe .@Controller
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
public class SimpleController {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}public static void main(String[] args) throws Exception {
SpringApplication.run(SimpleController.class, args);
}
}
</ code>J'ai essayé toutes les choses mentionnées ci-dessus mais je n'ai pas pu résoudre le problème. J'utilise SQLite et mon fichier SQLite se trouvait dans le répertoire des ressources.
a) Configuration effectuée pour IDE
J'ai besoin d'ajouter manuellement les lignes ci-dessous dans le fichier .classpath de mon projet.
<classpathentry kind="src" path="resources"/>
<classpathentry kind="output" path="target/classes"/>
Après cela, j'ai actualisé et nettoyé le projet de la barre de menus en haut. comme Projet-> Nettoyer-> Nom de mon projet.
Après cela, je lance le projet et le problème est résolu.
application.properties pour mon projet est
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) La configuration est terminée si le déploiement du conteneur génère la même erreur
Vous devez ajouter les lignes suivantes à votre pom.xml
<build>
<resources>
<resource>
<directory>resources</directory>
<targetPath>${project.build.outputDirectory}</targetPath>
<includes>
<include>application.properties</include>
</includes>
</resource>
</resources>
</build>
Peut-être que cela peut aider quelqu'un.
Dans mon cas, en utilisant IDEA, après avoir supprimé le répertoireout
, tout redevient normal. Je ne sais tout simplement pas pourquoi, mais ça a fonctionné.
si vous n'avez aucune base de données dans votre application, désactivez simplement la configuration automatique de la source de données en ajoutant l'annotation ci-dessous.
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
Déjà assez de réponses ont été postées. Cependant, je poste ce que j'ai fait et comment je l'ai corrigé.
Dans mon cas, j'avais empaqueté mon projet sous la forme pom
au lieu de jar
pom.xml:
...
<packaging>pom</packaging>
...
Changé en:
...
<packaging>jar</packaging>
...
Cela peut être utile pour quelqu'un avec la même erreur.
Cliquez avec le bouton droit sur le projet et sélectionnez l'option suivante Maven -> Mettre à jour le projet. Cela a résolu mon problème.
Généralement, une telle erreur se produit lorsque vous utilisez JPA et oubliez d'ajouter une connexion à une base de données. Vous devez donc ajouter des dépendances liées à la base de données dans votre application.
Bien que vous souhaitiez utiliser JPA sans connecter de base de données externe, ajoutez ensuite hsqldb dans votre dépendance.
J'espère que ça aide!
Voici comment j'ai résolu ce problème.
Dans mon cas: je devais configurer la source de données pour MySQL Server, qui était un serveur externe.
Comme nous le savons tous, Spring Boot est capable de configurer automatiquement DataSource pour les bases de données intégrées.
Ainsi, je me suis rendu compte que je devais désactiver la configuration automatique de la source de données pour utiliser ma configuration personnalisée.
Comme mentionné ci-dessus par de nombreuses personnes, j'ai désactivé la configuration automatique de la source de données de Spring Boot sur application.properties.
spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
J'ai défini toutes les propriétés de configuration hibernate dans un fichier séparé: Hibernate-mysql.properties
Ensuite, j’ai codé ma propre configuration Hibernate personnalisée de la manière suivante et le problème a été résolu.
Ma façon de configurer la source de données souhaitée en fonction des propriétés dans un fichier de propriétés personnalisées et de remplir votre LocalSessionFactoryBean avec votre source de données et une autre configuration de veille prolongée
Classe de configuration personnalisée Hibernate: -
------------------------------------------------- ------------
Même chose pour @Anas. Je peux l'exécuter dans Eclipse, mais lorsque j'utilise "Java -jar ...", lancez-le, cela me donne cette erreur. Ensuite, je trouve que mon chemin de génération Java est incorrect, le dossier «src/main/resources» est manquant. L'application ne trouve donc pas application.properties. Lorsque j’ajoutais le dossier «src/main/resources» dans le chemin de construction de Java, cela fonctionnait.
Et vous devez ajouter "@PropertySource ({" application.properties "})" dans votre classe d'application.
Supprimer C:\Users\admin\.IntelliJIdea2018.1\system\compile-server
Je voudrais le problème similaire et l'exclusion de DataSourceAutoConfiguration et HibernateJpaAutoConfiguration a résolu le problème.
J'ai ajouté ces deux lignes dans mon fichier application.properties et cela a fonctionné.
> spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
> spring.autoconfigure.exclude[1]=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
Si vous utilisez Gradle, incluez le pot droit du pilote comme ci-dessous:
compile("org.mongodb:mongo-Java-driver:3.3.0")
Ou si vous utilisez Maven, faites-le à la manière de Maven, cela devrait résoudre votre problème.
Vous pouvez télécharger le fichier derby-10.10.1.1.jar à partir du référentiel Maven et le placer dans votre dossier WEB-INF/lib, comme dans cette application/WEB-INF/lib/derby-10.10.1.1.jar . Votre AnnotationConfigEmbeddedWebApplicationContext intégré récupérera le pilote de la base de données et votre serveur Web commencera à fonctionner sans aucun problème :-)
À tous ceux qui viennent sur ce fil après des heures passées à se cogner la tête contre un mur. J'ai résolu cette erreur en changeant
create table `group`(
id char(19) primary key
);
à
create table if not exists `group`(
id char(19) primary key
);
dans mon fichier schema.sql dans le répertoire des ressources.