我有一个调度,当我调用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();
}
1条答案
按热度按时间fjnneemd1#
实现这一点的一般方法是使用异步介质(如队列)。
您将需要完成的任务发送到队列,并让另一个组件侦听并执行该任务。
一种不太标准的方法是将任务存储在数据库中,有特定的组件扫描数据库,获取任务,标记任务正在处理,执行任务。在某个超时之后,其他节点可以拾取处理任务并重新执行它