近日采用Spring默认定时@Scheduled,定时任务配置@Scheduled(cron = “0 15 10 L * ?”) 每个月的最后一天10:15”执行定时任务的时候,它在初始化Spring上下文时出现了错误:
-
Caused by: java.lang.IllegalStateException: Encountered invalid
-
@Scheduled method 'execute': For input string: "L"
-
查其原因是Spring默认定时@Scheduled不支持L,W,C特殊字符
- 解决方案:
- 首先,为每个可能的最后几天调用调度程序(28,29,30,31)。然后,在函数块内用if块检查这是否是最后一个日期。如果是,则执行预期的任务:
-
@Scheduled(cron = "0 0 12 28-31 * ?")//每月最后一天12点执行 public void execute() { final Calendar c = Calendar.getInstance(); //如果是最后一天 则执行定时任务 if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) { System.out.println("消息推送定时Job开始。。。。"); } }