我对Spring Boot版本2.0.1有问题。RELEASE(在Spring Boot 2.0.0.RELEASE中,以下配置运行良好)。
有人能帮我解释一下为什么这个配置不起作用吗?我有这个配置,但这个配置与ConditionalOnBean条件不匹配。
自动配置顺序似乎没有任何效果。
@Configuration
@ConditionalOnClass({DataSource.class, JpaRepository.class})
@ConditionalOnBean(DataSource.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
@ConditionalOnProperty(prefix = "spring.data.jpa.repositories", name = "enabled", havingValue = "true", matchIfMissing = true)
@AutoConfigureOrder(LOWEST_PRECEDENCE)
@Order(LOWEST_PRECEDENCE)
public class MyJpaAuditAutoConfiguration {
@ConditionalOnMissingBean
@Bean
public MyTransactionHelper transactionHelper() {
return new MyTransactionHelper();
}
}
在Spring中。工厂我有:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.example.MyJpaAuditAutoConfiguration
此配置的应用程序启动输出:
DataSourceAutoConfiguration matched:
- @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
...
JpaAuditAutoConfiguration:
Did not match:
- @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) did not find any beans of type javax.sql.DataSource (OnBeanCondition)
Matched:
- @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.data.jpa.repository.JpaRepository'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- @ConditionalOnProperty (spring.data.jpa.repositories.enabled=true) matched (OnPropertyCondition)
在我看来,config类是在DataSourceAutoConfiguration之前评估的,这就是为什么找不到bean的原因。其他配置(如DataSourceHealthIndicatorAutoConfiguration)找到了bean。
DataSourceHealthIndicatorAutoConfiguration matched:
- @ConditionalOnClass found required classes 'org.springframework.jdbc.core.JdbcTemplate', 'org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- @ConditionalOnEnabledHealthIndicator management.health.defaults.enabled is considered true (OnEnabledHealthIndicatorCondition)
- @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found bean 'dataSource' (OnBeanCondition)
Spring Boot后升级至版本2.1.2。释放自动解决。
(我在回答中重命名了一些类)
所以在Spring Boot版本2.1.2中。RELEASE
:
@Configuration
@ConditionalOnBean(DataSource.class)
@ConditionalOnClass({DataSource.class, JpaRepository.class})
@ConditionalOnProperty(prefix = "spring.data.jpa.repositories", name = "enabled", havingValue = "true", matchIfMissing = true)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class JpaTransactionHelperAutoConfiguration {
@ConditionalOnMissingBean
@Bean
public TransactionHelper transactionHelper() {
return new TransactionHelper();
}
}
注意:通过删除AutoConfigureAfter(DataSourceAutoConfiguration.class)它在Spring Boot版本2.1.2中不起作用。释放。
在Spring Boot版本2.0.1中。RELEASE我刚刚删除了ConditionalOnBean注释:
@Configuration
@ConditionalOnClass({DataSource.class, JpaRepository.class})
@ConditionalOnProperty(prefix = "spring.data.jpa.repositories", name = "enabled", havingValue = "true", matchIfMissing = true)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class JpaTransactionHelperAutoConfiguration {
@ConditionalOnMissingBean
@Bean
public TransactionHelper transactionHelper() {
return new TransactionHelper();
}
}
本机Spring Boot自动配置(例如one)也可以检测主类中声明的bean(例如注释的方法)。 如何对主类中声明的bean进行正确的bean检测? 编辑
我想在运行时选择.properties文件。Microprofile-config有可能吗?因此,我想使用一个外部文件,而不是使用meta-inf/microprofile-config.properties: 我知道,编写自定义配置源是可能的,但我想知道是否有一个内置选项来定义配置文件,从而避免在每个项目中重复代码
我正在创建一个后spring web服务endpoint,并使用一个Object,其中包含大约7-8个String变量和其他变量。在验证请求时,我需要对每个条件进行相同的测试,例如- < li >条件1如果为真,则继续,否则抛出异常。 < li >条件2如果为真,则继续,否则抛出异常。 < li >条件3如果为真,则继续,否则抛出异常 3-4更多业务逻辑验证就像上面一样,有很多if-else,一种
4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类
我有一个简单的SpringBoot应用程序,我想使用AutoConfiguration来配置Tomcat jdbc池数据源。 我正在使用这些Spring依赖项: 以下是我的 application.yml 文件中的数据源属性: 我确定正在加载属性,因为应用程序正在获取其他值。 我在配置文件中将 bean 定义为: 我将数据源注入到我的DAO中,如下所示: 如果我在getDataSource()方法
我的项目使用MySQL、JavaFX、Spring Boot、Spring Data JP和Hibernate框架/技术。 这是我的POM文件。 这是我的。属性配置。 这是我的主课 这是stacktrace: 上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂UnsatifiedPendencyException:创建名为“org”的bean时出错。sprin