java - 如何让 Java rest api 调用立即返回而不是等待?

标签 java spring asynchronous

@RequestMapping(value = "/endpoint", method = RequestMethod.POST)
    public ResponseEntity<?> endpoint(@RequestBody final ObjectNode data, final HttpServletRequest request) {
        somefunction();
        return new ResponseEntity<>(HttpStatus.OK);
    }


public somefunction() {
 .....
 }

在 Java spring Controller 中,我有一个端点。当这个端点被调用时,我希望它直接返回,而不是等待 somefunction() 完成。任何人都可以教我如何处理这个问题?

最佳答案

如果您使用的是 Java 8,则可以使用新的 Executor 类:

@RequestMapping(value = "/endpoint", method = RequestMethod.POST)
public ResponseEntity<?> endpoint(@RequestBody final ObjectNode data, final HttpServletRequest request) {
    Executors.newScheduledThreadPool(1).schedule(
        () -> somefunction(),
        10, TimeUnit.SECONDS
    );
    return new ResponseEntity<>(HttpStatus.ACCEPTED);
}

这将:

  1. 安排 somefunction() 在 10 秒延迟后运行。
  2. 返回 HTTP 202 已接受(这是当您的 POST 端点实际上没有当场创建任何内容时您应该返回的内容)。
  3. 10 秒后运行 somefunction()

关于java - 如何让 Java rest api 调用立即返回而不是等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40906367/

相关文章:

Swift CloudKit 和 CKQuery : how to iteratively retrieve records when queryResultBlock returns a query cursor

java - 是否可以从 Java 调用 BlazeDS?

java - 使用 Tomcat 将 Java 应用程序连接到数据库

启动 Spring WebFlow2 过渡的 Javascript 代码

java - 带工厂的 Spring 依赖注入(inject)(动态值)

javascript - 异步加载脚本?

c# - 使用 Prism 创建基础加载 View

Java 数组索引越界异常

java - 来自多个交易参与者 jpos 的响应

Spring 3.1 JPA 在 tomcat 中运行时不插入数据