我有一个简单的任务:即使服务器停机,我也需要每两个月的第一天运行一个进程 如果服务器不会宕机——任务就很简单:
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(可运行任务,日期开始时间,长周期)
不幸的是,ThreadPoolTaskScheduler 不支持
public ScheduledFuture 计划(可运行任务,日期开始时间,触发器触发器)
我使用额外的 Scheduler.execute 实现了该功能,但问题是是否可以使用一个调度来完成该功能。
最佳答案
您可以使用java.util.Timer为此,请在 TimerTask 实现中安排下一个 TimerTask。
如果必须正好是两个月,您应该在 TimerTask 启动时安排另一个 TimerTask,否则您可以在 TimerTask 结束时安排它。
关于java - 即使服务器停机,每 2 个月在第一天安排一个进程的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16146721/