Java Spring Boot中的计划作业
我在应用程序属性文件中设置了一个cron表达式,如下所示:Java Spring Boot中的计划作业,java,spring-boot,cron,Java,Spring Boot,Cron,我在应用程序属性文件中设置了一个cron表达式,如下所示: report.monthlyScheduleTime=0 10 07 1W * ? 注释如下: @Scheduled(cron = "${report.monthlyScheduleTime}", zone="${report.scheduleTimeZone}") 但是当运行应用程序时,我得到了以下异常 原因:java.lang.IllegalStateException:遇到无效 @计划的方法“ReportJob”:用于输入字符
report.monthlyScheduleTime=0 10 07 1W * ?
注释如下:
@Scheduled(cron = "${report.monthlyScheduleTime}", zone="${report.scheduleTimeZone}")
但是当运行应用程序时,我得到了以下异常
原因:java.lang.IllegalStateException:遇到无效
@计划的方法“ReportJob”:用于输入字符串:“1W”
Spring Boot似乎不接受cron表达式中定义的
1W
。知道为什么吗?不确定要创建什么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
Spring Boot似乎不接受cron表达式中定义的1W。知道为什么吗
1W
特定于Quartz,但您没有使用Quartz
您的cron表达式(
0 10 07 1W*?
)基于以下条件是正确的:
“W”用于指定最接近给定日期的工作日(星期一至星期五)。例如,如果要将“15W”指定为“月日”字段的值,其含义是:“最接近该月15日的工作日”
但是模式1W
是石英特有的
对于,您正在使用Spring自己的调度支持。这允许基于的表达式,但不支持1W
因此,您需要实际使用Quartz或修改cron表达式。如果您想使用Quartz,在中的“使用Quartz调度程序”一节介绍了Spring对Quartz的支持。但是,如果要修改cron表达式,可以参考。我希望在每个月的第一个工作日运行作业。请尝试以下操作:@Scheduled(cron=“0 0 10?1/1 MON#1*))每个月的第一个星期一都是上午10点这不是我想要的,例如,5月1日是星期二,我希望它在星期二运行,下周一不行,现在我明白了。别以为这里有个简单的出路。这是怎么回事:如果是星期一,如果是一个月的第一、第二、第三天(例如,如果是第三天,第一天是星期五),那么cron在这里类似于@Scheduled(cron=“0 0 10 1,2,3*MON”),如果其他任何工作日是一个月的第一天,那么它应该可以工作:@Scheduled(cron=“0 10 1*TUE-THU”)“1W”表示第一个工作日,它是月日的有效表示法,但不确定为什么Spring Boot不使用它,这是Spring Boot中的错误吗?这里是指向QUARTZ cron触发器教程的链接,“1W”是月日的有效值。似乎Spring Boot与QUAETZ不兼容。