Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 为什么创建异步REST服务是有益的?_Spring_Multithreading - Fatal编程技术网

Spring 为什么创建异步REST服务是有益的?

Spring 为什么创建异步REST服务是有益的?,spring,multithreading,Spring,Multithreading,Spring允许用@RequestMapping注释的方法返回各种对象,包括CompletableFuture或Future。这允许我派生出一个异步方法,并让spring在准备就绪时返回该值。我不确定我是否理解这是否有任何好处。例如: @RestController public class MyController { @RequestMapping("/user/{userId}") public CompletableFuture<User> getUser(@

Spring允许用
@RequestMapping
注释的方法返回各种对象,包括
CompletableFuture
Future
。这允许我派生出一个异步方法,并让spring在准备就绪时返回该值。我不确定我是否理解这是否有任何好处。例如:

@RestController
public class MyController {
    @RequestMapping("/user/{userId}")
    public CompletableFuture<User> getUser(@PathVariable("userId") String userId) {
        return CompletableFuture.supplyAsync(
              () -> this.dataAccess.getUser(userId));
}

乍一看,这似乎是一种更好的方法,因为没有额外的线程和寻找完成的观察程序的开销。

这利用了Servlet 3异步请求处理,使用
request.startAsync()
方法。阅读和

为了实现这一点,Servlet 3 web应用程序可以调用request.startAsync()并使用返回的AsyncContext继续从其他独立线程写入响应。同时,从客户机的角度来看,请求看起来仍然像任何其他HTTP请求-响应交互。只是需要更长的时间才能完成。以下是事件的顺序:

@RequestMapping("/user/{userId}")
public User getUser(@PathVariableS("userId") String userId) {
    return this.dataAccess.getUser(userId);
}