Cron Expression在该月的最后一天不起作用 [英] Cron Expression is not working for last day of the month

查看:237
本文介绍了Cron Expression在该月的最后一天不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想安排任务在每月的最后一天上午10:10运行. cron表达式为0 10 10 L * ?

I want to schedule a task to run on last day of every month at 10:10 AM. The cron expression is 0 10 10 L * ?

现在的问题是CronSequenceGenerator将'c'值扔给NumberFormatException.这意味着Spring的CronSequenceGenerator不支持这种表达.但是,如果我只传递数字,则可以正常工作.

Now the problem is CronSequenceGenerator is throwing NumberFormatException for 'L' value. This means Spring's CronSequenceGenerator doesn't support this kind of expression. But if I am passing only passing numeric it is working fine.

这是完整的堆栈跟踪:

Exception in thread "main" java.lang.NumberFormatException: For input string: "L"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.valueOf(Integer.java:582)
at org.springframework.scheduling.support.CronSequenceGenerator.getRange(CronSequenceGenerator.java:324)
at org.springframework.scheduling.support.CronSequenceGenerator.setNumberHits(CronSequenceGenerator.java:297)
at org.springframework.scheduling.support.CronSequenceGenerator.setDays(CronSequenceGenerator.java:275)
at org.springframework.scheduling.support.CronSequenceGenerator.setDaysOfMonth(CronSequenceGenerator.java:266)
at org.springframework.scheduling.support.CronSequenceGenerator.parse(CronSequenceGenerator.java:239)
at org.springframework.scheduling.support.CronSequenceGenerator.<init>(CronSequenceGenerator.java:81)
at org.springframework.scheduling.support.CronTrigger.<init>(CronTrigger.java:54)
at org.springframework.scheduling.support.CronTrigger.<init>(CronTrigger.java:44)
at com.hcdc.coedp.datantar.scheduler.SchedulerUtil.start(SchedulerUtil.java:75)
at com.hcdc.coedp.datantar.scheduler.SchedulerUtil.changeTrigger(SchedulerUtil.java:106)
at com.hcdc.coedp.datantar.scheduler.SchedulingService.scheduleTransfer(SchedulingService.java:70)
at com.hcdc.coedp.datantar.scheduler.Scheduler.schedule(Scheduler.java:107)     
at main.Main.main(Main.java:47)

推荐答案

此计划在每月的最后一天上午10:10运行:

This Schedule runs on the last day of the month an 10:10AM:

@Scheduled(cron = "0 10 10 28-31 * ?")
public void doStuffOnLastDayOfMonth() {
    final Calendar c = Calendar.getInstance();
    if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) {
        // do your stuff
    }
}

这篇关于Cron Expression在该月的最后一天不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆