Springでは、@RequestMapping
で注釈を付けられたメソッドで、CompletableFuture
またはFuture
など、さまざまなオブジェクトを返すことができます。これにより、私は非同期メソッドを生成し、準備ができたらいつでもバネに値を返すことができます。私が理解していないことは、これに何らかの利益があるかどうかということです。例えばこの場合なぜ非同期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);
}
最初の視線から、これは追加のスレッドと完了を探しウォッチャーとはオーバーヘッドがないのでより良いアプローチであると思われます。