从前端调用我的休息 Controller 后,我需要调用一些延迟操作。例如,使用方法 Update 调用端点/ Controller 后。我希望获得响应状态正常,并在 Controller 调用调度程序中,该调度程序将在仅调用端点一次后 15 分钟后对数据库中的实体执行一些更新功能。我只想简单地延迟更改 2 个 boolean 字段。我应该用什么? @Schedule 注释还是只是 sleep 或者其他什么?我将不胜感激所有的建议。
最诚挚的问候!
最佳答案
@Scheduled 意味着定期执行某个方法。对于您想要的内容,您应该使用 ScheduledExecutor
类。有关更多详细信息,请参阅文档 https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html
它有两个方法,scheduleWithFixedDelay
方法是您要使用的方法。
编辑:这是一个例子
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
//Do you database save here
}
}, 0, 15, TimeUnit.MINUTES);
编辑2:
也许使用 schedule()
方法更简单,因为您只进行一次更新。上面的示例适用于您有多个操作,每个操作必须连续完成,并且执行之间有 15 分钟的固定延迟。对于仅一次执行,您可以使用:
executorService.schedule(() -> database.save(), 15, TimeUnit.MINUTES);
executorService.shutdown();
代码() ->database.save()
被称为lambda表达式。
在调度调用之后调用 shutdown 很重要,否则可能会出现内存泄漏。 shutdown()
方法将等待 executorService 队列中的线程执行完毕,之后会销毁所使用的线程。
关于java - 我应该使用 @Scheduled 还是在休息 Controller 中 sleep ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59330106/