web-dev-qa-db-fra.com

Configuration automatique du démarrage du printemps pour la source de données

J'essaie de créer l'application Spring Boot avec Hibernate 5 et Postgres 9. Maintenant, j'ai l'erreur suivante:

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.
    - Bean method 'dataSource' not loaded because @ConditionalOnProperty (spring.datasource.jndi-name) did not find property 'jndi-name'
    - Bean method 'dataSource' not loaded because @ConditionalOnBean (types: org.springframework.boot.jta.XADataSourceWrapper; SearchStrategy: all) did not find any beans

Bien que j’ai ajouté les propriétés spring.datasource. *:

spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=root

Mon pom.xml:

<properties>
    <hibernate.version>5.2.6.Final</hibernate.version>
    <spring.data.version>1.10.6.RELEASE</spring.data.version>
</properties>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.3.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>${spring.data.version}</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate.version}</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.12</version>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4.1212</version>
    </dependency>
</dependencies>

Rapport:

=========================
AUTO-CONFIGURATION REPORT
=========================


Positive matches:
-----------------

AopAutoConfiguration matched:
- @ConditionalOnClass found required classes 'org.springframework.context.annotation.EnableAspectJAutoProxy', 'org.aspectj.lang.annotation.Aspect', 'org.aspectj.lang.reflect.Advice' (OnClassCondition)
- @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition)

AopAutoConfiguration.JdkDynamicAutoProxyConfiguration matched:
- @ConditionalOnProperty (spring.aop.proxy-target-class=false) matched (OnPropertyCondition)

DataSourceAutoConfiguration matched:
- @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition)

DataSourceAutoConfiguration#dataSourceInitializer matched:
- @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer; SearchStrategy: all) did not find any beans (OnBeanCondition)

DataSourceTransactionManagerAutoConfiguration matched:
- @ConditionalOnClass found required classes 'org.springframework.jdbc.core.JdbcTemplate', 'org.springframework.transaction.PlatformTransactionManager' (OnClassCondition)

DataSourceTransactionManagerAutoConfiguration.TransactionManagementConfiguration matched:
- @ConditionalOnMissingBean (types: org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration; SearchStrategy: all) did not find any beans (OnBeanCondition)
...
DataSourceAutoConfiguration.EmbeddedDatabaseConfiguration:
Did not match:
- EmbeddedDataSource did not find embedded database (DataSourceAutoConfiguration.EmbeddedDatabaseCondition)

DataSourceAutoConfiguration.PooledDataSourceConfiguration:
Did not match:
- AnyNestedCondition 0 matched 2 did not; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.PooledDataSourceAvailable PooledDataSource did not find supported DataSource; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.ExplicitType @ConditionalOnProperty (spring.datasource.type) did not find property 'type' (DataSourceAutoConfiguration.PooledDataSourceCondition)

DataSourceAutoConfiguration.TomcatDataSourceJmxConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.Apache.Tomcat.jdbc.pool.DataSourceProxy' (OnClassCondition)

DataSourcePoolMetadataProvidersConfiguration.CommonsDbcp2PoolDataSourceMetadataProviderConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.Apache.commons.dbcp2.BasicDataSource' (OnClassCondition)

DataSourcePoolMetadataProvidersConfiguration.CommonsDbcpPoolDataSourceMetadataProviderConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.Apache.commons.dbcp.BasicDataSource' (OnClassCondition)

DataSourcePoolMetadataProvidersConfiguration.HikariPoolDataSourceMetadataProviderConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)

DataSourcePoolMetadataProvidersConfiguration.TomcatDataSourcePoolMetadataProviderConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.Apache.Tomcat.jdbc.pool.DataSource' (OnClassCondition)

DataSourceTransactionManagerAutoConfiguration.DataSourceTransactionManagerConfiguration:
Did not match:
- @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) did not find any beans (OnBeanCondition)

Des idées? Dans la plupart des tutoriels, tout est très standard et très simple, il me manque une petite partie ..

25
Fergus MacDubh

Il vous manque plusieurs classes (principalement liées à la piscine) sur votre chemin de classe. La solution la plus simple consiste à utiliser le démarreur de démarrage Spring pour JPA, à savoir:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

Si vous faites cela, vous pouvez supprimer les dépendances suivantes car elles font toutes partie du démarreur:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>${spring.data.version}</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>${hibernate.version}</version>
</dependency>

La solution alternative consiste à ajouter manuellement un fournisseur de pool à votre chemin de classe. La valeur par défaut de spring-boot-starter-data-jpa est Tomcat-jdbc (Hikari pour Spring Boot 2.x), mais vous pouvez utiliser n’importe quel fournisseur de pool de connexions que vous souhaitez et répertorié dans la documentation .

27
g00glen00b

bien, la solution ci-dessus a peut-être fonctionné, mais dans mon cas avec weblogic 11g, la solution ci-dessus n'a pas pu m'aider. afin d’attacher cette solution afin que tous les elsestruggling avec ce problème le trouvent utile.

solution:

L'ajout de la configuration de bean DataSource dans le chemin de classe d'analyse de composant résoudra ce problème pour les servlets 2.5, comme weblogic 10.3.6 (11g), comme ci-dessous.

@Configuration
public class DBConfig{

       @Bean
       public DataSource dataSource(){
          DriverManagerDataSource dataSource = new DriverManagerDataSource();
          dataSource.setDriverClassName("Oracle.jdbc.driver.OracleDriver");
          dataSource.setUrl("your url");
          dataSource.setUsername( "username" );
          dataSource.setPassword( "password" );
          return dataSource;
       }

}
6
praveen kumar