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