场景:
假设我们需要根据不同环境或者通过配置来控制某一配置文件或任务不执行。本篇举例springboot集群,存在定时任务,限制只在一个节点中执行定时任务,其他节点不执行。
简介:
ConditionalOnProperty注解可以控制某个configuration不生效。主要通过几个属性值来实现,prefix属性-配置前缀,可不填;name -配置文件application.properties中定义的属性名;havingValue-生效时的预期值,一般设置为true。
根据name在application.properties中获取属性的值,该值与havingValue的值比较,与其相等则当前configuration生效,不等则不生效。当name的值在application.properties中不存在则返回false。
代码:
在需要控制的configuration类或者定时任务中添加注解
@ConditionalOnProperty(prefix = "scheduling", name = "enabled", havingValue = "true")
@Component
public class WorkTimer {
@Scheduled(cron = "0/5 * * * * *")
public void scheduled() {
log.info("=====>>>>>使用cron {}",System.currentTimeMillis());
}
}
application.properties:
scheduling.enabled=false (或为空,此时定时任务不生效)
scheduling.enabled=true (此时定时任务生效)
在指定的节点加上配置scheduling.enabled=true,其余节点加上配置scheduling.enabled=false
此时确保只有一个节点会执行定时任务,避免重复执行