Scheduled 每月最后一天晚上8点 ;关于@Scheduled cron表达式中不支持每月最后一天`L`的解决方案

简介 关于@Scheduled cron表达式中不支持每月最后一天`L`的解决方案

在工作中,我们有时候会用定时任务。Scheduled 每月最后一天晚上8点 

有两种写法:

@Scheduled(cron = "0 0 20 28–31 * ?")
public void carryOver() {
    //TODO 
}

这种写法,如果报错:

8e17d62dee3fccc3a8a17d6f950681f2.png

L不识别。

关于Spring定时任务每月最后一天 corn表达式使用L 报错 可以使用如下解决办法:

修改:第二种写法:

@Scheduled(cron = "0 59 23 28-31 * ?")
public void execute() {
    final Calendar c = Calendar.getInstance();
        /**
         * c.get(Calendar.DATE) 当前时间
         * c.getActualMaximum(Calendar.DATE) 本月最后一日
         */
    if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) {
        //show your code
    }
}

说明:需要在代码里面判断是否当月最后一天。

因为:首先,每月最后一天可能为(28,29,30,31)这几天只需要在这几天调度程序,在程序中判断是否为最后一天,如果是则执行需要执行的代码块


Top Top