Spring默认定时@Scheduled不支持L、W、C关键字的解决办法

1、Caused by: java.lang.IllegalStateException: Encountered invalid

2、@Scheduled method 'execute': For input string: "L"

3、查其原因是Spring默认定时@Scheduled不支持L,W,C特殊字符

解决方案:
首先,为每个可能的最后几天调用调度程序(28,29,30,31)。然后,在函数块内用if块检查这是否是最后一个日期。如果是,则执行预期的任务:

点击查看代码
</details>
@Scheduled(cron = "0 0 12 28-31 * ?")
        public void execute() {
            final Calendar c = Calendar.getInstance();
            //如果是最后一天 则执行定时任务
            if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) {
                System.out.println("消息推送定时Job开始。。。。");
            }
        }

@Scheduled(cron = "0 0 12 28-31 * ?")的
具体解释如下:
第一位(秒):表示任务开始时的秒数。这里设置为0,表示在整分钟开始时执行。
第二位(分):表示任务开始时的分钟数。这里也设置为0,与第一位配合使用。
第三位(小时):表示任务开始时的小时数。同样设为0,在每天凌晨零点触发执行。
第四位(日):表示月份中需要触发该定时器事件所需满足条件日期号码 。这里设为1,意味着只有当当前时间处于某年某月第一天才会被调度到
第五、六两个问号“?”和最后面那个星期标识符“WED”都可以省略不写
posted @ 2023-03-03 09:31  不想挨捶的牛  阅读(408)  评论(0编辑  收藏  举报