Spring定时任务注解@Scheduled
in 默认分类 with 0 comment

Spring定时任务注解@Scheduled

in 默认分类 with 0 comment

cron表达式

Spring的定时任务使用的是cron表达式,但不完全一样,主要是在星期几这个值上。
有个项目需要每周一0点执行一次定时任务,结果发现没有准时执行。

正常的cron表达式,1代表周日,2代表周一,但是在Spring的@Scheduled里,0和7代表周日,1才是代表周一。
网上大多数文档都没提到这个问题(或许是版本差异?)
@Scheduled相关文档链接

贴个源码里的注释:

       ┌───────────── second (0-59)
       │ ┌───────────── minute (0 - 59)
       │ │ ┌───────────── hour (0 - 23)
       │ │ │ ┌───────────── day of the month (1 - 31)
       │ │ │ │ ┌───────────── month (1 - 12) (or JAN-DEC)
       │ │ │ │ │ ┌───────────── day of the week (0 - 7)
       │ │ │ │ │ │          (0 or 7 is Sunday, or MON-SUN)
       │ │ │ │ │ │
       * * * * * *

如果要使用到星期,建议使用周几的英文缩写作为值。
例如:0 0 0 ? * MON

示例

@Component
@Configuration      //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
public class SaticScheduleTask {
    //3.添加定时任务
    @Scheduled(cron = "0/5 * * * * ?")
    //或直接指定时间间隔,例如:5秒
    //@Scheduled(fixedRate=5000)
    private void configureTasks() {
        System.err.println("执行静态定时任务时间: " + LocalDateTime.now());
    }
}
Responses