数据源的Spring Boot自动配置 [英] Spring Boot auto configuration for datasource

查看:133
本文介绍了数据源的Spring Boot自动配置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 参数0 of org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration中的构造函数需要一个无法找到的'javax.sql.DataSource'类型的bean。 
- Bean方法'dataSource'未加载,因为@ConditionalOnProperty(spring.datasource.jndi-name)未找到属性'jndi-name'
- 未加载Bean方法'dataSource',因为@ConditionalOnBean(types :org.springframework.boot.jta.XADataSourceWrapper; SearchStrategy:all)没有找到任何bean

虽然,我添加了spring.datasource。*属性:

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

我的pom.xml:

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

<依赖关系>
< dependency>
< groupId> org.springframework.boot< / groupId>
< artifactId> spring-boot-autoconfigure< / artifactId>
< /依赖关系>

< dependency>
< groupId> org.springframework.boot< / groupId>
< artifactId> spring-boot-starter-web< / artifactId>
< /依赖关系>

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

< dependency>
< groupId> org.hibernate< / groupId>
< artifactId> hibernate-core< / artifactId>
< version> $ {hibernate.version}< / version>
< /依赖关系>

< dependency>
< groupId> org.projectlombok< / groupId>
< artifactId> lombok< / artifactId>
< version> 1.16.12< / version>
< /依赖关系>

< dependency>
< groupId> org.postgresql< / groupId>
< artifactId> postgresql< / artifactId>
< version> 9.4.1212< / version>
< /依赖关系>
< /依赖关系>

报告:

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


正面匹配:
-------------- ---

AopAutoConfiguration匹配:
- @ConditionalOnClass找到必需的类'org.springframework.context.annotation.EnableAspectJAutoProxy','org.aspectj.lang.annotation.Aspect','org .aspectj.lang.reflect.Advice'(OnClassCondition)
- @ConditionalOnProperty(spring.aop.auto = true)匹配(OnPropertyCondition)

AopAutoConfiguration.JdkDynamicAutoProxyConfiguration匹配:
- @ConditionalOnProperty匹配(OnPropertyCondition)

DataSourceAutoConfiguration匹配:
- @ConditionalOnClass找到所需的类'javax.sql.DataSource','org .springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'(OnClassCondition)

DataSourceAutoConfiguration#dataSourceIniti匹配的匹配器:
- @ConditionalOnMissingBean(类型:org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer; SearchStrategy:all)没有找到任何bean(OnBeanCondition)

DataSourceTransactionManagerAutoConfiguration匹配:
- @ConditionalOnClass找到所需的类'org.springframework.jdbc.core.JdbcTemplate','org.springframework。 transaction.PlatformTransactionManager'(OnClassCondition)

DataSourceTransactionManagerAutoConfiguration.TransactionManagementConfiguration匹配:
- @ConditionalOnMissingBean(类型:org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration; SearchStrategy:all)没有找到任何bean OnBeanCondition)
...
DataSourceAutoConfiguration.EmbeddedDatabaseConfiguration:
不符合:
- EmbeddedDataSource未找到嵌入式数据库(DataSourceAutoConfiguration.EmbeddedDatabaseCondition)

DataSourceAutoConfiguration .PooledDataSourceConfiguration:
不符合:
- AnyNestedCondition 0匹配2不符合; DataSource上的NestedConditionAutoConfiguration.PooledDataSourceCondition.PooledDataSourceAvailable PooledDataSource未找到受支持的DataSource; DataSourceAutoConfiguration.PooledDataSourceCondition.ExplicitType @ConditionalOnProperty(spring.datasource.type)上的NestedCondition未找到属性'type'(DataSourceAutoConfiguration.PooledDataSourceCondition)

DataSourceAutoConfiguration.TomcatDataSourceJmxConfiguration:
不符合:
- @ConditionalOnClass未找到所需的类'org.apache.tomcat.jdbc.pool.DataSourceProxy'(OnClassCondition)

DataSourcePoolMetadataProvidersConfiguration.CommonsDbcp2PoolDataSourceMetadataProviderConfiguration:
不符合:
- @ConditionalOnClass未找到所需的类'org.apache.commons.dbcp2.BasicDataSource'(OnClassCondition)

DataSourcePoolMetadataProvidersConfiguration.CommonsDbcpPoolDataSourceMetadataProviderConfiguration:
不符合:
- @ConditionalOnClass确实找不到所需的类'org.apache.commons.dbcp.BasicDataSource'(OnClassCondition)

DataSourcePoolMetadataProvidersConfiguratio n.HikariPoolDataSourceMetadataProviderConfiguration:
不符合:
- @ConditionalOnClass未找到所需的类com.zaxxer.hikari.HikariDataSource(OnClassCondition)

DataSourcePoolMetadataProvidersConfiguration.TomcatDataSourcePoolMetadataProviderConfiguration:
不匹配:
- @ConditionalOnClass未找到所需的类'org.apache.tomcat.jdbc.pool.DataSource'(OnClassCondition)

DataSourceTransactionManagerAutoConfiguration.DataSourceTransactionManagerConfiguration:
不匹配:
- @ConditionalOnSingleCandidate(类型:javax.sql.DataSource; SearchStrategy:all)没有找到任何bean(OnBeanCondition)

任何想法?在大多数教程中,这一切都非常标准,很简单,似乎我错过了一些小部分。

你的类路径中有几个类(大部分是与池相关的)。最简单的解决方案是使用JPA的Spring启动启动器,即:


$ b

 <依赖性> 
< groupId> org.springframework.boot< / groupId>
< artifactId> spring-boot-starter-data-jpa< / artifactId>
< /依赖关系>

如果您这样做,您可以删除以下依赖项,因为它们都是启动器的一部分:

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

< dependency>
< groupId> org.hibernate< / groupId>
< artifactId> hibernate-core< / artifactId>
< version> $ {hibernate.version}< / version>
< /依赖关系>

另一种解决方案是手动将池提供程序添加到您的类路径中,缺省值为 spring -boot-starter-data-jpa tomcat-jdbc (Hikari for Spring boot 2.x),但您可以使用文档


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

解决方案

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.

这篇关于数据源的Spring Boot自动配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆