支持的注解参数
fixedRate
在调用之间以固定的毫秒数执行该方法。
fixedRateString
与fixedRate
相同但是使用字符串值。
fixedDelay
在一次调用结束和下一次调用开始之间以固定的毫秒数执行该方法。
fixedDelayString
与fixedDelay
相同但是使用字符串值。
cron
使用类似cron的表达式来确定何时执行该方法。
zone
指示将解析cron表达式的时区,如果未包含时区,则将使用服务器的默认时区。因此,如果需要它来运行特定的时区,比如香港,可以使用zone = "GMT+8:00"
。
initialDelay
延迟第一次执行计划任务的毫秒数,要求使用固定速率或固定延迟属性之一。
initialDelayString
与initialDelay
相同但是使用字符串值。
Spring类cron表达式
格式如下:
[Seconds] [Minutes] [Hours] [Day of month] [Month] [Day of week]
Spring允许的表达式是所有可能的cron表达式的子集,例如它不包含year字段,并且不能使用所有特殊字符。
Seconds
可以有值0-59
或特殊字符, - * /
。
Minutes
可以有值0-59
或特殊字符, - * /
。
Hours
可以有值0-23
或特殊字符, - * /
。
Day of month
可以有值1-31
或特殊字符, - * ? /
。
Month
可以有值1-12
,JAN-DEC
或特殊字符, - * /
。
Day of week
可以有值1-7
,SUN-SAT
或特殊字符, - * ? /
。
特殊字符的含义:
*
表示所有值,如果在第二个字段中使用它表示每秒或在日期字段中使用意味着每天运行。
?
表示没有特定值,可以在月中或星期几字段中使用,其中一个使用则另一个无效。如果指定在一个月的第15天触发,那么?
将在该Day of week
字段中使用 。
-
表示包含范围的值,例如小时字段中的1-3表示小时1,2和3。
,
表示其他值,例如星期几中的MON,WED,SUN表示星期一,星期三和星期日。
/
表示增量,例如秒数字段中的0/15从0(0,15,30和45)开始每15秒触发一次。
Encountered invalid @Scheduled method 。。。For input string错误
@EnableAsync
@EnableScheduling
@SpringBootApplication
public class AsyncdemoApplication {
public static void main(String[] args) {
SpringApplication.run(AsyncdemoApplication.class, args);
}
}
------------------------------------------------------------------------
@Service
public class ScheduledService {
@Scheduled(cron = "0 22/1 14 ? 4 7L")
public void scheduledCall() {
System.out.println("called!");
}
}
在上文的表达式中,会出现如下错误
Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method ‘scheduledCall’: For input string: “7L”
错误的根源是 Spring 的表达式 只是 cron表达式的子集,它不包含year字段,并且不能使用所有特殊字符,比如L和W,大部分的文档有误导。