java - 我应该使用 @Scheduled 还是在休息 Controller 中 sleep ?

标签 java spring rest spring-boot scheduled-tasks

从前端调用我的休息 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/

相关文章:

node.js - 将数据从我的其余 api 提取到我的 VueJS 组件的数组数据属性中

spring - Grails Spring 安全休息插件

java - 为什么在 redis 中使用管道时 100,000 条记录这么慢?

oracle - 未找到 javax.xml.ws.WebServiceException : Provider com. sun.xml.internal.ws.spi.ProviderImpl

xml - 您如何全局设置 Jackson 以忽略 Spring 中的未知属性?

java - 如何从 Swing 与 Servlet 进行通信

java - Spring 集成: receive messages from multiple JMS destinations

java - 对 Bitstamp 的经过身份验证的 Java Jersey REST 调用

java - 如何在mongodb中的单个字段中添加值

java - 用正则表达式替换特定标识符