我有以下代码:
@Scheduled(cron = "${cron.foo.bar}")
@ConditionalOnProperty(name="cron.foo.bar.enabled", relaxedNames = false)
public void parseFooBar() {
... blah blah blah ...
}
Run Code Online (Sandbox Code Playgroud)
在我的属性文件中,我有:
cron.foo.bar=1 * * * * ?
cron.foo.bar.enabled=false
Run Code Online (Sandbox Code Playgroud)
这不起作用,并且parseFooBar在第1秒每分钟执行一次.
但是,如果我添加字段:
@Value("${cron.foo.bar.enabled}")
private String enabledProp;
Run Code Online (Sandbox Code Playgroud)
所以我可以做一个日志并查看它是什么,parseFooBar不会被执行.删除注入的String再次看到parseFooBar执行.我究竟做错了什么?
编辑:这是使用Spring 4.1.5,Spring Boot 1.2.1和JDK 8
编辑2:将注释移动到类型也有效.(无需强制@Value).但注释是方法还是类型注释?它让我在方法上有更多的灵活性......
And*_*son 14
Spring Framework中的条件用于控制组件是否在应用程序上下文中注册.来自javadoc @Conditional:
该
@Conditional注释可以在以下任一方式使用:
- 作为直接或间接注释的任何类的类型级注释
@Component,包括@Configuration类- 作为元注释,用于组成自定义构造型注释
- 作为任何
@Bean方法的方法级注释
当声明条件时parseFooBar它没有效果,因为它不是一种@Bean方法.它在您在类型上声明它时可以正常工作,因为它使组件成为条件,以便在属性不匹配时它不会在应用程序上下文中注册.
| 归档时间: |
|
| 查看次数: |
19840 次 |
| 最近记录: |