我在应用程序属性文件中设置了一个cron表达式,如下所示:
report.monthlyScheduleTime=0 10 07 1W * ?
并注释如下,
@Scheduled(cron = "${report.monthlyScheduleTime}", zone="${report.scheduleTimeZone}")
但是当运行应用程序时,我得到以下异常。
引起:java.lang.IllegalStateException:遇到无效 @Scheduled方法'ReportJob':输入字符串:“1W”。
Spring Boot似乎不接受cron表达式中定义的1W
。知道为什么吗?
答案 0 :(得分:1)
Spring Boot似乎不接受cron表达式中定义的1W。知道为什么吗?
1W
特定于Quartz,但您没有使用Quartz。
您的cron表达式(0 10 07 1W * ?
)基于Quartz documentation:
'W'用于指定最接近给定日期的工作日(周一至周五)。例如,如果您指定“15W”作为日期字段的值,则含义为:“最近的工作日到该月的15日”。
但模式1W
特定于Quartz。
使用@Scheduled
,您正在使用Spring自己的调度支持。这允许基于Crontab pattern进行表达,但不支持1W
。
因此,您需要实际使用Quartz或修改您的cron表达式。如果你想在Spring documentation on scheduling中使用Quartz,那么“使用Quartz Scheduler”一节描述了Spring对Quartz的支持。但是,如果要修改cron表达式,可以参考CronSequenceGenerator
。
答案 1 :(得分:0)
不确定您想要创建什么样的cron,但也许这些示例可以帮助您了解您的问题:
Example patterns:
"0 0 * * * *" = the top of every hour of every day.
"*/10 * * * * *" = every ten seconds.
"0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
"0 0 6,19 * * *" = 6:00 AM and 7:00 PM every day.
"0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 every day.
"0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
"0 0 0 25 12 ?" = every Christmas Day at midnight