在 spring 中编写 cron 表达式

Pat*_*ton 4 spring crontrigger cronexpression

我正在使用 springs 任务调度程序(ConcurrentTaskScheduler)来安排我的任务。我正在使用 API

public ScheduledFuture schedule(Runnable task,Trigger trigger)
Run Code Online (Sandbox Code Playgroud)

执行我的任务。我使用的触发器是 CronTrigger。
我使用以下语句初始化触发器

Trigger trigger = new CronTrigger(cronExp);
Run Code Online (Sandbox Code Playgroud)

我需要以这样的方式编写一个 cronExp,使其在特定日期开始并从那时起每天执行。

我检查了 ConcurrentTaskScheduler 的 API,但我可以找到合适的 API 来实现/我可能错过了一些 API。

谁能建议我一种方法来实现上述要求?

gut*_*tch 5

据我所知,您不能使用 SpringCronTrigger仅从某个日期开始。

\n\n

Cron 语法不支持从任意日期每天运行某些内容;它支持每天运行某些内容在任意日期 \xe2\x80\x94 运行一次,但不能同时运行两者。这意味着您可以使用两个触发器:将一个 cron 触发器设置为在开始日期触发;然后在第一个触发发生时创建一个新的每日触发。

\n\n

然而,只有当您使用的 cron 触发器支持年份时,这才可以正常工作,例如 Quartz 在其 cron 触发器中有一个选项年份字段。春天CronTrigger不支持岁月。因此,如果您确实尝试在特定日期(例如0 0 12 26 1 ?澳大利亚国庆日中午)安排某些内容,那么它将每年运行,而不仅仅是一次,从而导致每年创建重复的触发器。

\n\n

相反,我建议创建一个简单的触发器每天运行,即:

\n\n
    Trigger trigger = new CronTrigger("0 0 12 * * ?);\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以你的代码每天都会运行。然后在代码中添加一个简单的日期检查:如果您尚未到达开始日期,则跳过您的任务,即:

\n\n
    if ((new Date()).after(startDate)) {\n        // Run your task here\n    }\n
Run Code Online (Sandbox Code Playgroud)\n