如何在单个@ConditionalOnProperty注解中配置两个控制Bean加载的属性条件
@ConditionalOnProperty 多条件匹配实现方案
结论
可以通过单个@ConditionalOnProperty注解实现需求,无需额外组合其他条件注解。
实现原理
Spring Boot 提供的@ConditionalOnProperty注解的name属性支持传入字符串数组,可同时指定多个配置项校验规则,默认所有配置项均匹配指定值时,条件才会生效,刚好匹配需要同时满足两个条件的场景。
可运行示例代码
Bean类定义
@RestController @RequestMapping("/blablabla") @ConditionalOnProperty(name = {"my.property.value1.enabled", "my.property.value2"}, havingValue = "true") public class MyBean {}
对应application.yml配置
my: property: value1: # 第一个判断条件,必须为true enabled: true # 第二个判断条件,必须为true value2: true
注意事项
- 上述写法默认两个配置项都必须存在且值为
true才会加载MyBean,如果缺少任意一个配置、或者任意一个配置值不为true,该Bean都不会被Spring容器加载 - 如果后续需求调整为两个配置项的期望值不同,无法通过单个
@ConditionalOnProperty实现,需要使用@ConditionalOnProperties组合多个@ConditionalOnProperty注解
内容的提问来源于stack exchange,提问作者Hayk Mkhitaryan
相关产品推荐
相关产品推荐

