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

  • 作者: 凯哥Java(公众号:凯哥Java)
  • 工作小总结
  • 时间:2021-10-08 19:49
  • 3395人已阅读
简介 关于@Scheduled cron表达式中不支持每月最后一天`L`的解决方案

🔔🔔好消息!好消息!🔔🔔

 如果您需要注册ChatGPT,想要升级ChatGPT4。凯哥可以代注册ChatGPT账号代升级ChatGPT4

有需要的朋友👉:微信号 kaigejava2022

在工作中,我们有时候会用定时任务。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)这几天只需要在这几天调度程序,在程序中判断是否为最后一天,如果是则执行需要执行的代码块


TopTop