Java 即使服务器停机,在每2个月的第一天安排进程的最佳方法也是如此

Java 即使服务器停机,在每2个月的第一天安排进程的最佳方法也是如此,java,spring,quartz-scheduler,crontrigger,Java,Spring,Quartz Scheduler,Crontrigger,我有一个简单的任务:我需要在每两个月的第一天运行一个进程,即使服务器关闭 如果服务器不停机–任务非常简单: ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); CronTrigger trigger = new CronTrigger("0 0 1 1 */2 ?"); scheduler.schedule(new Runnable() { @Override public void run() {

我有一个简单的任务:我需要在每两个月的第一天运行一个进程,即使服务器关闭 如果服务器不停机–任务非常简单:

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不支持
公共计划未来计划(可运行任务、日期开始时间、触发器)
我使用附加的scheduler.execute实现了该功能,但问题是是否可以使用一个计划来实现它。

您可以使用它,并在TimerTask实现中安排下一个TimerTask


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

您可能想尝试而不是基于Java的解决方案。谢谢,@Oded。我使用额外的scheduler.execute(我编辑了答案)执行类似的操作,我希望使用类似于
Timer.schedule(TimerTask task,datefirsttime,Trigger Trigger)的东西来执行