Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot @有条件地有条件地工作_Spring Boot - Fatal编程技术网

Spring boot @有条件地有条件地工作

Spring boot @有条件地有条件地工作,spring-boot,Spring Boot,我有如下代码: @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 这不起作用,parse

我有如下代码:

@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不会被执行。再次移除注入的字符串将看到parseFooBar执行。我做错了什么

编辑:这是使用Spring 4.1.5、Spring Boot 1.2.1和JDK 8


编辑2:将注释移动到类型也有效。(无需强制输入@值)。但是注释既是方法又是类型注释?它让我在方法上更灵活一些…

Spring框架中的一个条件用于控制组件是否在应用程序上下文中注册。从
@Conditional
的javadoc:

@条件
注释可通过以下任一方式使用:

  • 作为任何类上的类型级注释,直接或间接地使用
    @组件
    进行注释,包括
    @配置
  • 作为元注释,用于编写自定义原型注释
  • 作为任何
    @Bean
    方法上的方法级注释

当在
parseFooBar
上声明条件时,它没有任何效果,因为它不是
@Bean
方法。当您在类型上声明组件时,它的工作方式与您预期的一样,因为它会使组件有条件,这样当属性不匹配时,它就不会在应用程序上下文中注册。

谢谢。我现在已经进行了重构,以便我的每个\@调度方法本身都位于一个单独的bean中,由\@ConditionalOnProperty注释为首。现在有大量的bean,但至少所有的东西都是可配置和可读的。