春季时间表 - 月份的最后一天不起作用

问题描述 投票:1回答:1

我想在每个月的最后一天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

cron spring-scheduled
1个回答
2
投票

Spring Scheduler不支持“L”输入字符串。所以,你需要做一个解决方法。

首先,为每个可能的最后几天(28,29,30,31)调用调度程序。

然后,在功能块内部用if块检查这是否是最后一个日期。如果是,则执行预期任务。

代码将是这样的 -

@Scheduled(cron = "0 15 10 28-31 * ?")
public void monthEndSchedule() {
    final Calendar c = Calendar.getInstance();
    if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) {
        // do your stuff
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.