我有一个简单的任务:我需要在每 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)
不幸的是,ThreadPoolTaskScheduler 不支持
public ScheduledFuture schedule(Runnable task, Date startTime, Trigger trigger)
我使用额外的 scheduler.execute 实现了该功能,但问题是是否可以使用一个计划来实现。