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 CompletableFutureasyncMethod() { // 异步执行具体的业务逻辑 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 DeferredResultasyncMethod() { DeferredResult deferredResult = new DeferredResult<>(); // 在其他线程中进行具体的业务逻辑处理 new Thread(() -> { String result = doSomething(); // 设置最终的返回结果 deferredResult.setResult(result); }).start(); // 返回DeferredResult return deferredResult; } private String doSomething() { // 具体的业务逻辑 return "Async Result"; } }
这些方法都可以实现Controller方法的异步执行和返回结果,具体选择哪种方法取决于你的需求和项目的具体情况。