@Service
public class ScheduledService {
// 每月的最后一天23点执行一次
@Scheduled(cron = "0 0 23 28-31 * *")
public void scheduledCall() {
System.out.println("hello world !");
}
}
运行出现问题:
Caused by: java.lang.IllegalStateException:Encountered invalid @Scheduled method 'ScheduledService' For input string:"L"
原因: Spring 的表达式 只是 cron表达式的子集,它不包含year字段,并且不能使用所有特殊字符,比如L和W,大部分的文档有误导。
解决办法:
//今日是几号
LocalDate nowDate = LocalDate.now();
int today = nowDate.getMonthValue();
// 月底最后一天
int lastDay = Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);
if(today != lastDay){
return ;
}
System.out.println(lastDay);
验证:crontab执行时间计算 - 在线工具 (tool.lu)