Spring中@ConditionalOnBean与@ConfigurationProperties配合不生效问题咨询
Spring中@ConditionalOnBean与@ConfigurationProperties配合不生效问题咨询
各位好,我最近在Spring Boot项目里遇到个配置相关的问题,卡了好一阵,想请大家帮忙看看。
我的需求是:根据一组ConfigurationProperties的存在(实际业务场景里是要根据配置属性里的某个具体值,本来打算用@ConditionalOnExpression或者自定义Condition来实现,但为了简化问题定位,我先用@ConditionalOnBean来复现核心问题),条件化地初始化某个Bean。
首先我先定义了对应的ConfigurationProperties类:
@ConfigurationProperties(prefix = "myprops") public class MyProps { private final List<String> sources; public MyProps(List<String> sources) { this.sources = sources; System.out.println("MyProps constructor called with sources: " + sources); } public List<String> getSources() { return sources; } }
然后是我的Spring Boot启动类:
@SpringBootApplication @EnableConfigurationProperties @ConfigurationPropertiesScan public class BeanOrderTestApplication { public static void main(String[] args) { SpringApplication.run(BeanOrderTestApplication.class, args); } // 我在某个@Configuration类或者直接在这个启动类里,给目标Bean标注了@ConditionalOnBean(MyProps.class) // 比如类似这样的代码: // @Bean // @ConditionalOnBean(MyProps.class) // public MyTargetBean myTargetBean() { // return new MyTargetBean(); // } }
但实际运行下来发现,这个@ConditionalOnBean的条件判断完全不生效——不管MyProps这个配置属性Bean有没有被正确加载,目标Bean要么总是被创建,要么总是不创建,完全不符合我的预期。
我猜测会不会是ConfigurationProperties的Bean加载顺序和@ConditionalOnBean的判断时机不匹配?比如@ConditionalOnBean判断的时候,MyProps还没被初始化完成?有没有大佬能帮我分析下问题根源,或者给个解决思路呀?
备注:内容来源于stack exchange,提问作者Ewen
相关产品推荐
相关产品推荐

