春季计划-一个月的最后一天不工作

时间:2019-01-29 07:28:15

标签: cron spring-scheduled

我想在“每月的最后一天10:15”和“每月的第一个星期日”进行春季调度工作-

我在下面尝试过-但是在初始化spring上下文时出现错误:

org.springframework.boot.SpringApplication:应用程序启动失败 java.lang.IllegalStateException:遇到无效的@Scheduled方法'monthEndSchedule':对于输入字符串:“ L”

@Override
@Scheduled(cron = "0 15 10 L * ?")
public void monthEndSchedule() { 
  //
}

尽管下面的作品在“每天凌晨1点”运行

@Override
@Scheduled(cron = "0 0 1 * * ?")
public void surveyDailySchedule() {
//
}

我使用过的Cron表达式参考:http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html

2 个答案:

答案 0 :(得分:2)

Spring Scheduler不支持“ L”输入字符串。因此,您需要采取一种解决方法。

首先,为每个月的最后几天(28,29,30,31)呼叫调度程序。

然后,在功能块内使用if块检查是否为最后日期。如果是,则执行预期的任务。

代码将是这样-

cv2.resize()

答案 1 :(得分:0)

如果有人更喜欢用 JDK8+ 进行检查,这里是:

@Scheduled(cron = "0 15 10 28-31 * ?")
public void doStuff() {
    LocalDate date = LocalDate.now();
    LocalDate last = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
    if (date.getDayOfMonth() == last.getDayOfMonth()) {
        //TODO: your job
    }
}

这将在每个月的最后 4 天的下午 6 点运行。