4

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

public ScheduledFuture schedule(Runnable task,Trigger trigger)

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

Trigger trigger = new CronTrigger(cronExp);

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

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

任何人都可以建议我实现上述要求的方法吗?

4

2 回答 2

5

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

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

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

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

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

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

    if ((new Date()).after(startDate)) {
        // Run your task here
    }
于 2011-03-15T04:00:11.227 回答
0

请找到以下链接

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

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

我建议您使用 spring 石英调度程序集成

于 2013-03-21T04:07:23.613 回答