ChatGPT解决这个技术问题 Extra ChatGPT

每天 1:01:am 的 Spring cron 表达式

我试图让我的代码根据 Spring cron 表达式按固定时间表执行。我希望每天凌晨 1:01 执行代码。我尝试了以下表达式,但这对我来说并没有触发。这里的语法有什么问题?

@Scheduled(cron = "0 1 1 ? * *")
public void resetCache() {
    // ...
}
我的 cron 表达式 0 0 0 1 JAN MON 一直工作到去年。 1 月 1 日起停止工作,说无效的 cron 表达式。虽然这是为了降低频率,但我们能够运行 tc server。 1 月 1 日之后它没有。当我更改为 0 0 7 时? * SUN 它开始工作了。我很想知道为什么 0 0 0 1 JAN MON 像去年 1 月一样停止工作。
0 0 0 1 JAN MON 可能是错误的表达方式,在这方面它也可以正常工作,tc 服务器从不抱怨

s
s.alem

尝试:

@Scheduled(cron = "0 1 1 * * ?")

您可以在下面找到来自 spring 论坛的示例模式:

* "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 8,10 * * *" = 8 and 10 o'clock of every day.
* "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30 and 10 o'clock 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

Cron 表达式由六个字段表示:

second, minute, hour, day of month, month, day(s) of week

(*) 表示匹配任何

*/X 表示“每 X”

?(“无特定值”)- 当您需要在允许字符的两个字段之一中指定某些内容时很有用,但另一个字段中不允许。例如,如果我希望触发器在每月的某一天(比如 10 号)触发,但我不在乎一周中的哪一天,我会在当天输入“10”-月字段和“?”在星期几字段中。

PS:为了使其工作,请记住在您的应用程序上下文中启用它:https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support


该格式也记录在 spring 本身这里 - docs.spring.io/spring/docs/3.0.x/api/org/springframework/…
我猜 spring cron 也能够提供秒数,但正常的 unix cron 是基于分钟的......因为在 unix 手册页中,分钟是可以配置的最小时间单位。
“?”的意义是什么?特点?它是否仅适用于“星期几”字段?如果我们替换“?”,它会起作用/做一些不同的事情吗?在圣诞节示例中使用“*”?
B
Bahadir Tasdemir

对于我的调度程序,我每天早上 6 点使用它来触发,我的 cron 表示法是:

0 0 6 * * *

如果你想要 1:01:am 然后将其设置为

0 1 1 * * *

调度器的完整代码

@Scheduled(cron="0 1 1 * * *")
public void doScheduledWork() {
    //complete scheduled work
}

** 很重要

为了确保调度程序的触发时间正确性,您必须像这样设置区域值(我在伊斯坦布尔):

@Scheduled(cron="0 1 1 * * *", zone="Europe/Istanbul")
public void doScheduledWork() {
    //complete scheduled work
}

您可以从 here 找到完整的时区值。

注意:我的 Spring 框架版本是:4.0.7.RELEASE


我不知道为什么你的答案只有 12,即使它是这里唯一正确的答案!
非常感谢@MoayadAbuJaber。分数并不重要,如果开发人员能够用我的答案解决他们的问题就足够了,干杯。
我可以使用带有 xml config sheduler <task:scheduled ref="paypalCronJob" method="runTask" cron="0 0 6 * * * ?"/> 的区域吗?
竖起大拇指提及时区
谢谢,@Forhad。如果您是开发人员并处理与日期和时间相关的任何问题,您必须了解时间戳、时区和转换的详细信息。否则,您的数据将是无稽之谈
n
nbrooks

您可以使用 @Scheduled(cron ="0 1 1 * * ?") 注释您的方法。

0 - 秒

1- 1 分钟

- 一天中的 1 小时。


M
Maleen Abewardana

吉皮纳尼的回答中缺少一些东西

@Scheduled(cron = "0 1 1,13 * * ?", zone = "CST")

这将在 1.01 和 13.01 执行。当您需要每天多次运行没有模式的作业时,可以使用它。

当您在远程服务器中进行部署时,zone 属性非常有用。这是在 spring 4 中引入的。


请注意,缩写(时区)的支持仅用于 JDK 1.1.x 兼容性,应使用全名 - 根据 javadoc
I
Irlan Cidade

我注意到的一件事是:spring CronTrigger 不是 cron。您最终可能会在有效的 cron 表达式中得到 7 个参数(您可以在 cronmaker.com 上进行验证),然后 spring 不接受它。大多数情况下,您只需删除最后一个参数,一切正常。


“CronTrigger 不是石英”
M
MACCXpace

每天 1:01:am 的 Spring cron 表达式

@Scheduled(cron = "0 1 1 ? * *")

有关更多信息,请查看以下信息:

https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm