Spring Boot提供了多種異步返回結果的方法,以下是其中幾種常用的方法:
async
注解:在Controller的方法上添加@Async
注解,使其異步執行。然后使用CompletableFuture
來包裝返回結果,可以通過CompletableFuture
的supplyAsync
方法來異步執行具體的業務邏輯,并將結果賦值給CompletableFuture
。最后通過CompletableFuture
的get
方法來獲取異步執行的結果。示例代碼如下:
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.CompletableFuture;
@RestController
public class MyController {
@Async
@GetMapping("/async")
public CompletableFuture<String> asyncMethod() {
// 異步執行具體的業務邏輯
String result = doSomething();
// 返回異步結果
return CompletableFuture.completedFuture(result);
}
private String doSomething() {
// 具體的業務邏輯
return "Async Result";
}
}
DeferredResult
:DeferredResult
是Spring提供的一個用于異步返回結果的類。在Controller的方法中,創建一個DeferredResult
對象,并將其返回。然后可以在其他線程中進行具體的業務邏輯處理,并通過DeferredResult
的setResult
方法來設置最終的返回結果。示例代碼如下:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.async.DeferredResult;
@RestController
public class MyController {
@GetMapping("/async")
public DeferredResult<String> asyncMethod() {
DeferredResult<String> deferredResult = new DeferredResult<>();
// 在其他線程中進行具體的業務邏輯處理
new Thread(() -> {
String result = doSomething();
// 設置最終的返回結果
deferredResult.setResult(result);
}).start();
// 返回DeferredResult
return deferredResult;
}
private String doSomething() {
// 具體的業務邏輯
return "Async Result";
}
}
這些方法都可以實現Controller方法的異步執行和返回結果,具體選擇哪種方法取決于你的需求和項目的具體情況。