Spring注解定时任务@Scheduled

322 阅读2分钟

这是我参与8月更文挑战的第20天,活动详情查看:8月更文挑战

@Scheduled是Spring框架里面实现定时任务的注解,包括很多特定的参数,如Cron表达式、fixedDelay、fixedDelayString、fixedRate、initialDelay等等。

在需要定时执行的方法前面加上该注解,注解@Scheduled作为一个触发源添加到方法中。

@Scheduled

fixedDelay

以下的方法将以一个固定延迟时间5秒钟调用一次执行,这个周期是以上一个调用任务的完成时间为基准,在上一个任务完成之后,5s后再次执行:

@Scheduled(fixedDelay = 5000)
public void JobDemo() {
    try {
        log.info("任务开始执行............");
       
    } catch (Exception e) {
        log.error("任务执行失败");
    }
}

fixedRate

如果需要以固定速率执行,只要将注解中指定的属性名称改成fixedRate即可,以下方法将以一个固定速率5s来调用一次执行,这个周期是以上一个任务开始时间为基准,从上一任务开始执行后5s再次调用:

@Scheduled(fixedRate = 5000)
public void JobDemo() {
    try {
        log.info("任务开始执行............");
       
    } catch (Exception e) {
        log.error("任务执行失败");
    }
}

initialDelay

第一次延迟多长时间后再执行,例如下面这个就是第一次延迟1秒后执行,接下来都是5s后执行。

@Scheduled(fixedDelay = 5000, initialDelay = 1000)
public void JobDemo() {
    try {
        log.info("任务开始执行............");
       
    } catch (Exception e) {
        log.error("任务执行失败");
    }
}
Cron表达式
由左到右的含义依次为:
秒(059)
分(059)
小时(023)
日(月)(031,注意使用到的月的天数)
月(011)
天(星期)(17 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
年份(19702099)。

每一项有多个时用逗号隔开,不考虑的话用*号代替,即“ * ”字符代表所有值都可能。

例如:(从右往左看)

"0 0 12 * * ?" 每天中午12:00:00触发

"0 15 10 * * ? *" 每天上午10:15:00触发

"0 30 12 ? * 5L" 每月的最后一个星期四上午12:30:00触发。

L是last的缩写,代表最后,仅用在天(星期)和天(月)上面。 在L前由参数时,代表其他含义。

如6L,在天(星期)表示最后一个星期五。在天(月)表示最后倒数第6天。

现在网上转换工具也很多,感兴趣的话可以在网上好好学习一下。