假设我们有以下和平的代码:
@SpringBootApplication
@ConditionalOnProperty(value = "scheduling.enable")
@EnableScheduling
@EnableCaching
public class AcmeServiceApplication {
public static void main(String[] args) {
SpringApplication.run(AcmeServiceApplication.class, args);
}
}
@ConditionalOnProperty
注释是否只会启用\禁用@EnableScheduling
还是也会对@EnableCaching
产生影响?
在文档中没有找到答案。
@ConditionalOnProperty
上的 @SpringBootApplication
没有任何意义,不会被处理。无论 scheduling.enable
财产是否存在,@EnableScheduling
和 @EnableCaching
都将适用。
@ConditionalOnProperty
是 @Configuration
和 @Bean
目标的目标。 @SpringBootApplication
完全是另一回事。
当在类上使用条件(例如
@ConditionalOnProperty
)时,它控制是否处理整个类。当它用于 @Bean
方法时,它控制是否处理单个方法。
在您的具体示例中,如果条件匹配,将处理
AcmeServiceApplication
,因此将启用计划和缓存,并且 @SpringBootApplication
将通过启用自动配置和组件扫描来生效。如果条件不匹配,AcmeServiceApplication
将不会被处理,因此调度和缓存都不会启用,@SpringBootApplication
将不起作用。
我有类似的问题,
@EnableCaching
和@ConditionalOnProperty
的组合不起作用,@EnableCaching
始终处于活动状态,无论条件属性是否禁用@Configuration
。