@ConditionalOnProperty有条件工作
我有如下代码:
@Scheduled(cron = "${cron.foo.bar}")@ConditionalOnProperty(name="cron.foo.bar.enabled", relaxedNames = false)
public void parseFooBar() {
... blah blah blah ...
}
在我的属性文件中,我有:
cron.foo.bar=1 * * * * ?cron.foo.bar.enabled=false
这不起作用,并且parseFooBar在第1秒每分钟执行一次。
但是,如果我添加该字段:
@Value("${cron.foo.bar.enabled}")private String enabledProp;
这样我可以做一个日志,看看它是什么,不会执行parseFooBar。再次删除注入的String,将看到parseFooBar执行。我究竟做错了什么?
编辑:这是使用Spring 4.1.5,Spring Boot 1.2.1和JDK 8
编辑2:将注释移动到类型也可以。(无需强制使用@Value)。但是注释既是方法注释又是类型注释?它使我在方法上更具灵活性。
回答:
Spring Framework中的条件用于控制组件是否在应用程序上下文中注册。来自的javadoc @Conditional
:
该
@Conditional
注释可以在以下任一方式使用:
- 作为任何类的直接或间接注释的类型级别注释
@Component
,包括@Configuration
类- 作为元注释,目的是组成自定义构造型注释
- 作为任何
@Bean
方法的方法级注释
声明条件时parseFooBar
,它不是@Bean
方法,因此无效。当您在类型上声明它时,它可以按您期望的方式工作,因为它使组件成为有条件的,以便在属性不匹配时不将其注册到应用程序上下文中。
以上是 @ConditionalOnProperty有条件工作 的全部内容, 来源链接: utcz.com/qa/429160.html