Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Boot中的计划作业_Java_Spring Boot_Cron - Fatal编程技术网

Java Spring Boot中的计划作业

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”:用于输入字符

我在应用程序属性文件中设置了一个cron表达式,如下所示:

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不兼容。