当前位置: 首页 > 知识库问答 >
问题:

Spring Boot中的计划作业

邹杰
2023-03-14

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

report.monthlyScheduleTime=0 10 07 1W * ?

注释如下,

@Scheduled(cron = "${report.monthlyScheduleTime}", zone="${report.scheduleTimeZone}")

但是当运行应用程序时,我得到了以下异常。

原因:java.lang.IllegalStateException:遇到无效@计划的方法'报告作业':对于输入字符串:"1W"。

Spring Boot似乎不接受cron表达式中定义1W。知道为什么吗?

共有2个答案

赫连华皓
2023-03-14

不确定您想要创建什么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
柳珂
2023-03-14

Spring Boot似乎不接受cron表达式中定义的1W。知道为什么吗?

1W是石英特有的,但您没有使用石英。

根据Quartz文档,您的cron表达式(0 10 07 1W*?)是正确的:

“W”用于指定最接近给定日期的工作日(周一至周五)。例如,如果要指定“15W”作为“月日”字段的值,则其含义是:“距离月15日最近的工作日”。

但是模式1W是特定于Quartz的。

通过调度,您可以使用Spring自己的调度支持。这允许基于Crontab模式的表达式,但不支持1W。

因此,您要么需要实际使用Quartz,要么修改您的cron表达式。如果您想使用Quartz,在Spring留档中,“使用Quartz Scheduler”一节描述了Spring对Quartz的支持。但是,如果您想修改cron表达式,您可以参考CronSequenceGenerator

 类似资料:
  • 我希望每天早上9点完成一项任务。我得到了一些有趣的结果。目前我的工作是这样的: 这是怎么回事?这是正确的表达吗?

  • 我有一个简单的计划任务,它是使用@计划注释创建的。类似这样的东西- 我还有一个蓝绿色升级场景,在这个场景中,这个计划任务可能会在蓝色和绿色集群中运行。鉴于这个计划任务修改了数据库,其中一个节点可能会覆盖来自另一个节点的数据——或者最坏情况下的竞争条件。 我想暂停绿色集群上所有计划的任务,直到它准备好接受流量。我已经有了代码来监听应用程序状态的变化。 我探索了几个选择- 只需在任务开始时添加一个布尔

  • 我正在进行一项预定的工作,该工作将以一定的间隔运行(例如每天下午1点),通过Cron安排。我正在使用Java和Spring。 编写计划作业非常简单 - 它确实如此:从db中抓取人员列表将某些条件,为每个人做一些计算并触发消息。 我正在本地和测试中开发单节点环境,但是当我们投入生产时,它将是多节点环境(带有负载均衡器等)。我关心的是多节点环境会如何影响计划的作业? 我的猜测是,我可能(或很可能)最终

  • 我需要两个 cron 工作,我真的不确定我做得是否正确。一个骗局作业应该在每 01.01.xxx 01:00 运行一次,另一个应该在每晚 01:00 运行。 这是正确的表达吗?

  • 我用Spring Boot构建simpy web api services应用程序,并用Spring Boot中的计划任务创建了一些cron作业服务,但不起作用。我需要在每周的12:00(星期一至星期五)运行此服务。这是一个exmaple sheduling:

  • 我用SpringBoot创建了一个简单的演示应用程序,其中包括执行器。带有@Scheduled注释的任务显示在执行器中,但以编程方式启动的任务不会显示。有没有办法让他们也出现? 我已经注释了@Enable调度。 我的组件如下所示: 执行器的结果仅显示带注释的任务: