Spring @Scheduled 默认不支持 L

2023-02-01 15:32:49 397

Spring 定时任务的坑 @Scheduled 默认不支持 L 等其他特殊字符 关键字

原本定义的执行机制

@Scheduled(cron = "0 59 23 L 3,6,9,12 ?")

启动项目时发现会报错

java.lang.IllegalStateException: Encountered invalid @Scheduled method 'LastReportOfMonth': For input string: "L"

Spring 默认定时 @Scheduled 不支持 L、W、C 关键字

详情可看源码

折中方案,28-31 号之间运行,如果当天不是本月最后一天,则不执行后续逻辑

@Scheduled(cron = "0 59 23 28-31 3,6,9,12 ?")
public void setUserGradeByEffectProperty() {
    final Calendar calendar = Calendar.getInstance();
    //如果不是最后一天 则不执行定时任务
    if (!(calendar.get(Calendar.DATE) == calendar.getActualMaximum(Calendar.DATE))){
        log.info("ClientTask->setUserGradeByEffectProperty:不是最后一天");
        return;
    }
    //todo something
}
请您留言
发送
请您留言 logo