1
Spring允許使用@RequestMapping
註釋的方法返回各種對象,包括CompletableFuture
或Future
。這使我可以產生一個異步方法,並讓Spring在準備就緒時返回值。我不確定我的理解是否對此有任何好處。例如:爲什麼使異步REST服務有利?
@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);
}
從第一幾眼,這似乎是一個更好的方法,因爲是一個額外的線程,看起來完成一個觀察者的開銷。