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方法的异步执行和返回结果,具体选择哪种方法取决于你的需求和项目的具体情况。