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