Spring Boot 如何通过配置文件开启关闭定时任务

Spring Boot 如何通过配置文件开启/关闭定时任务

如何使用定时任务

在spring boot中如果需要使用定时任务的话,使用一个注解即可搞定 @Scheduled

  1. 在启动类上或者配置类上加上 @EnableScheduling
@Configuration
@Slf4j
@EnableScheduling
public class TransactionJob {
}
  1. 在需要使用定时任务的方法上加 @Scheduled 注解,使用cro表达式指定执行时间
// 秒/分/时/日/月/星期
	@Scheduled(cron = "0 0 0 0 0 0")
    public  void readS3FileJob() {
    }

如何控制定时任务执行时间

如上,如果定时任务执行时间在代码里面写死的话,那么当时间发生变更时,我们需要去更改相关代码,很麻烦,那么,可不可我们去通过修改配置文件的相关参数来控制定时任务执行时间呢,答案是可以的,将cron表达式中的内容替换成如下即可。

    // 秒/分/时/日/月/星期
	@Scheduled(cron = "${timjob.readS3FileJob.time}")  //timjob.readS3FileJob.time是配置文件中定义的参数
    public  void readS3FileJob() {
    }

或者如下写法:

   final  String jobTime = "${timjob.readS3FileJob.time}";// 必须将变量定义为常量,否则会报错
	// 秒/分/时/日/月/星期
	@Scheduled(cron = jobTime)
    public  void readS3FileJob() {
    }

如何 开启/关闭 定时任务

如上,我们可以随意的更改配置文件的参数来控制定时任务执行时间,那么,我们可不可以也通过修改配置文件来控制是否让其执行呢,答案也是可以的。

  1. 通过springboot条件注解来控制定时任务是否执行

我们通过@ConditionalOnProperty注解,将其加载对应的定时任务类中,就可以根据配置文件中对应的属于来选择是否加载此类,从而控制类中的定时任务是否执行

//@ConditionalOnProperty(prefix = "timeJod",name = "declare",switch = "on")
public class TransactionJob {
}
  1. 通过再新增一个属性来控制定时任务是否执行

上面是通过控制整个类来选择定时任务是否执行,这样做的坏处就是,假如类中有多个定时任务,那么如果类没有加载的话,这些定时任务都会被关闭,所以我们可以通过新增一个属性来控制具体的定时任务代码,做法如下:

   @value("${timjob.readS3FileJob.swith}") //timjob.readS3FileJob.swith是配置文件中定义的参数
   String swith;
	// 秒/分/时/日/月/星期
	@Scheduled(cron = "${timjob.readS3FileJob.time}")  //timjob.readS3FileJob.time是配置文件中定义的参数
    public  void readS3FileJob() {
    if("on".equals(swith)){
        //执行对应的定时任务代码
    }
    }
  1. 第二种方式虽然可以做到对定时任务进行具体的控制,但是还是避免不了定时任务执行,只是相应的代码逻辑没走而已,那么有没有直接可以控制具体的定时任务是否执行,而且不用新增属性呢,答案是有的。SpringBoot2.1以后为我们提供了一种新的模式对定时任务进行控制。如下,再次对corn表达式进行改写。

        // 秒/分/时/日/月/星期
    	@Scheduled(cron = "${timjob.readS3FileJob.time:-}")  //timjob.readS3FileJob.time是配置文件中定义的参数
        public  void readS3FileJob() {
        } 
    

    “-” 表示定时任务不会执行,如果${}对应的参数再配置文件中没有的话,springboot默认会使用-进行填充,即,cron=“-” 表示关闭定时任务。

    通过这种方式我们就可以修改对应参数来控制定时任务执行时间,也可以通过注释掉对应的参数来关闭定时任务,非常方便。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值