在码头线程中等待

时间:2018-12-12 16:59:19

标签: spring-boot jetty

在我的Spring Boot网络应用中,我两次调用了旧版系统。当第一个电话返回时,我需要等待一段时间才能拨打第二个电话。

我不想在线程中sleep,而是将其返回到池中,直到一段时间后才能进行第二次调用。

所以问题是:我该怎么实现呢?

2 个答案:

答案 0 :(得分:0)

看看javax.servlet.AsyncContext,它仅在这种情况下存在。

答案 1 :(得分:0)

解决方案可能如下:

@GetMapping("/fubar")
public DeferredResult<ResponseEntity<?>> fubar() {
    DeferredResult<ResponseEntity<?>> result = new DeferredResult<>();
    scheduledExecutor.schedule(() -> {
        // do some useful stuff here
        result.setResult("Hello World");
    }, 5, TimeUnit.SECONDS);
    return output;
}

它是这样的:

  1. 您定义一个预定执行器 bean并将其注入到控制器中
  2. 在需要延迟的端点中,提交一个可运行的对象,该对象将在一定的延迟后执行,并将结果设置为DeferredResult实例
  3. 尽管立即返回DeferredResult实例,客户端将等待直到延迟过去,然后再接收结果。

注意!所有工作将在属于计划执行程序的线程池中发生,而不是在公共池中发生。因此,需要对其进行相应的配置。