Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot auto configuration for datasource

I try to create Spring Boot app with Hibernate 5 and Postgres 9. Now I have next error:

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 

Though, I have added spring.datasource.* properties:

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

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

Report:

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

Any ideas? In most tutorials it all is very standard and very simple, it seems I miss some little part..

like image 822
Oleksandr Cherniaiev Avatar asked Jan 19 '17 11:01

Oleksandr Cherniaiev


People also ask

What is DataSource auto-configuration spring boot?

Spring Boot auto-configuration attempts to automatically configure your Spring application based on the jar dependencies that you have added. For example, If HSQLDB is on your classpath, and you have not manually configured any database connection beans, then we will auto-configure an in-memory database.

How do I auto-configure in spring boot?

Auto-Configuration in Spring BootThe annotation @EnableAutoConfiguration is used to enable the auto-configuration feature. The @EnableAutoConfiguration annotation enables the auto-configuration of Spring ApplicationContext by scanning the classpath components and registering the beans.

What databases does spring boot auto-configure?

Spring Boot can auto-configure embedded H2, HSQL, and Derby databases. You need not provide any connection URLs. You need only include a build dependency to the embedded database that you want to use.

Does spring boot support auto-configuration?

Simply put, the Spring Boot auto-configuration helps us automatically configure a Spring application based on the dependencies that are present on the classpath. This can make development faster and easier by eliminating the need to define certain beans included in the auto-configuration classes.


1 Answers

You're missing several classes (mostly pool related) on your classpath. The easiest solution is to use the Spring boot starter for JPA, which is:

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

If you do this, you can remove the following dependencies since they're all part of the starter:

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

The alternative solution is to manually add a pool provider to your classpath, the default of spring-boot-starter-data-jpa is tomcat-jdbc (Hikari for Spring boot 2.x) but you can use any connection pool provider you want that is listed in the documentation.

like image 196
g00glen00b Avatar answered Oct 02 '22 19:10

g00glen00b