【问题标题】:Writing a cron Expression in springs在 springs 中编写一个 cron 表达式
【发布时间】:2011-07-15 12:00:35
【问题描述】:

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

public ScheduledFuture schedule(Runnable task,Trigger trigger)

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

Trigger trigger = new CronTrigger(cronExp);

我需要编写一个 cronExp,使其从特定日期开始并从那时起每天执行。

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

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

【问题讨论】:

标签: spring crontrigger cronexpression


【解决方案1】:

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

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

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

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

    Trigger trigger = new CronTrigger("0 0 12 * * ?);

因此您的代码将每天运行。然后在您的代码中添加一个简单的日期检查:如果您还没有达到开始日期,则跳过您的任务,即:

    if ((new Date()).after(startDate)) {
        // Run your task here
    }

【讨论】:

  • 我认为第二个选项最适合我的要求。非常感谢 Gutch
【解决方案2】:

请找到以下链接

http://www.mkyong.com/spring/spring-quartz-scheduler-example/

在 Spring 中,我们有集成的石英调度程序。仅需要 xml 配置来调度作业。您可以根据需要配置 cron 表达式。

我建议你使用 spring quartz 调度器集成

【讨论】:

    猜你喜欢
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2019-07-12
    相关资源
    最近更新 更多