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));
}
在这种情况下,即使实际计算发生在后台,连接仍然不会关闭,请求线程仍然处于活动状态,直到完成为止。怎么比说:
更好@RequestMapping("/user/{userId}")
public User getUser(@PathVariableS("userId") String userId) {
return this.dataAccess.getUser(userId);
}
从第一眼开始,这似乎是一种更好的方法,因为没有额外的线程和观察者寻找完成的开销。