我想安排一个任务在每个月的最后一天上午10:10运行。
cron表达式为0 10 10 L * ?
现在问题是CronSequenceGenerator
正在为{L'值抛出NumberFormatException
。这意味着Spring的CronSequenceGenerator
不支持这种表达。但是,如果我只通过传递数字,它工作正常。
这是完整的堆栈跟踪:
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)
答案 0 :(得分:1)
答案 1 :(得分:1)
Spring不支持本月的最后一天。请参阅CronSequenceGenerator
's javadoc。
答案 2 :(得分:1)
还有另一种可能的方法,取决于你想做什么:
import org.apache.commons.lang3.time.DateUtils;
@Scheduled(cron = "0 0 0 1 * ?") // runs on the first day of each month
public void doStuffOnFirstDayOfMonth() {
Date now = DateUtils.addDays(new Date(), -1); // "now" is now on the last day of the month
}
我用它来生成一个月的数据统计数据。该例程应该在 next 月的第一天运行,以确保捕获完整上一个月的所有数据。
虽然这个问题没有回答在本月最后一天有Cron Expression的意义上的问题,但对于需要运行整整一个月的工作仍然可以解决这个问题。月已经结束。
答案 3 :(得分:-1)
表达式在语法上与您的条件正确相符:0 10 10 L 1/1 ? *
这是您可能感兴趣的解决方法:Workaround for CronSequenceGenerator Last day of month?