使用@Scheduler注解时,如何在Cron表达式中添加年份?
解决@Scheduler注解添加年份的问题
问题根源
你使用的@Scheduler注解仅支持6字段的Cron表达式(秒、分、时、日、月、周),不兼容第七位的年份字段,所以添加年份后会抛出字段数量不匹配的异常。
具体解决办法
在任务代码内添加年份判断:
既然Cron表达式无法携带年份,就在任务执行前先校验当前年份,非2023年直接退出,示例代码:@Scheduler(crons = "0 30 17 30 3 ?") public void scheduledTask() { int currentYear = LocalDate.now().getYear(); if (currentYear != 2023) { return; } // 此处编写任务执行逻辑 }检查注解是否支持独立年份参数:
部分框架的@Scheduler注解会单独提供year参数,无需将年份写入Cron表达式,可尝试类似写法(具体以框架文档为准):@Scheduler(crons = "0 30 17 30 3 ?", year = "2023") public void scheduledTask() { // 任务执行逻辑 }切换支持7字段Cron的调度方案:
如果必须通过Cron表达式指定年份,可以改用Quartz这类支持7字段(秒、分、时、日、月、周、年)的调度框架,直接使用0 30 17 30 3 ? 2023即可。
内容的提问来源于stack exchange,提问作者jagan mohan Mylapuru
相关产品推荐
相关产品推荐

