注解@ConditionalOnProperty的使用——举例springboot集群情况下避免定时任务重复执行

场景:

假设我们需要根据不同环境或者通过配置来控制某一配置文件或任务不执行。本篇举例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   

此时确保只有一个节点会执行定时任务,避免重复执行

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值