Java 调度具有特定延迟且由多个节点运行的任务

Java 调度具有特定延迟且由多个节点运行的任务,java,executorservice,Java,Executorservice,当我调用API时,我有一个在60秒后运行的调度程序。现在的场景是在我调用API之后,如果我的服务器停机,那么这个调度任务将不会执行。因此,我想从服务器启动时它离开的同一点上拾取它。或者,第二种情况是,如果一个节点停机,则第二个节点应承担调度任务。我怎样才能做到这一点 任何建议都会很有帮助 提前谢谢 @PostMapping("/books") private int saveBook(@RequestBody Books books) { System.out.pri

当我调用API时,我有一个在60秒后运行的调度程序。现在的场景是在我调用API之后,如果我的服务器停机,那么这个调度任务将不会执行。因此,我想从服务器启动时它离开的同一点上拾取它。或者,第二种情况是,如果一个节点停机,则第二个节点应承担调度任务。我怎样才能做到这一点

任何建议都会很有帮助

提前谢谢

@PostMapping("/books")
private int saveBook(@RequestBody Books books) {
    System.out.println("Before " + new Date().toString());
    ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1);
    scheduledThreadPool.schedule(new Runnable() {
        public void run() {
            System.out.println("After " + new Date().toString());
        }
    }, 60, TimeUnit.SECONDS);
    System.out.println("M out");
    return books.getBookid();
}

实现这一点的一般方法是使用异步介质,如队列

您将需要完成的任务发送到队列,并让另一个组件侦听并执行该任务


一种不太标准的方法是将任务存储在数据库中,使用特定组件扫描数据库,获取任务,标记任务正在处理,执行任务。在某个超时之后,其他节点可能会拾取处理任务并重新执行它

请分享一些参考资料好吗?