您的位置:首页 > 编程语言 > Java开发

雷丰阳Springboot视频培训教程问题解决记录之九——Spring定时任务及Encountered invalid @Scheduled method For Input String错误

2019-04-28 15:26 1161 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lswx2006/article/details/89639073

支持的注解参数

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,大部分的文档有误导。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐