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