0

我有一个简单的任务:我需要在每 2 个月的第一天运行一个进程,即使服务器已关闭如果服务器不会关闭 - 任务很简单:

ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
CronTrigger trigger = new CronTrigger("0 0 1 1 */2 ?");
scheduler.schedule(new Runnable() {
    @Override
    public void run() {
        // do the job
        job();
    }
}, trigger);

但是如果服务器宕机而我一个月前开始工作怎么办?在这种情况下,我想在下月初执行我的工作。我上次执行作业时决定存储在数据库中:

private void job() {
// Store when the job was executed the last time
}

现在,当我的服务器启动时,我需要再次启动触发器,但不是立即启动。我可以轻松计算何时要启动触发器,但不幸的是我在ThreadPoolTaskScheduler. 有一个功能允许在开始时定期运行任务: public ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period)

不幸的是,ThreadPoolTask​​Scheduler 不支持 public ScheduledFuture schedule(Runnable task, Date startTime, Trigger trigger) 我使用额外的 scheduler.execute 实现了该功能,但问题是是否可以使用一个计划来实现。

4

1 回答 1

1

您可以使用java.util.Timer来执行此操作,并在 TimerTask 实现中安排下一个 TimerTask。

如果必须正好是两个月,您应该在 TimerTask 启动时安排另一个 TimerTask,否则您可以在 TimerTask 结束时安排它。

于 2013-04-22T12:16:38.227 回答