我想在“每月的最后一天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
答案 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 点运行。