与直接使用SpringableFuture相比,使用Spring @Async有什么优势?
2022-09-01 06:02:12
与仅自行返回相比,使用Spring Async有什么优势?CompletableFuture
与仅自行返回相比,使用Spring Async有什么优势?CompletableFuture
两者之间没有“vs.”——这些是互补的技术:
CompletableFuture
提供了一种便捷的方式来链接异步计算的不同阶段 - 比Spring的灵活性更高ListenableFuture
;@Async
通过执行器的标准 Spring 配置,方便地管理后台任务和线程。但两者可以合并(从春季4.2开始)。假设您要将以下方法转换为返回 :CompletableFuture
public String compute() {
// do something slow
return "my result";
}
你必须做什么:
@EnableAsync
Executor
@Async
CompletableFuture.completedFuture()
@Async
public CompletableFuture<String> computeAsync() {
// do something slow - no change to this part
// note: no need to wrap your code in a lambda/method reference,
// no need to bother about executor handling
return CompletableFuture.completedFuture("my result");
}
正如你所注意到的,你不必费心将后台任务提交给执行者:Spring会为你处理这个问题。您只需将结果包装到已完成中,以便签名与调用方的期望相匹配。CompletableFuture
实际上,这相当于:
@Autowire
private Executor executor;
public CompletableFuture<String> computeAsync() {
return CompletableFuture.supplyAsync(() -> {
// do something slow
return "my result";
}, executor);
}
但它消除了以下需要:
supplyAsync()
应用程序由容器管理。由于不鼓励自己生成 s,因此您可以让容器注入托管 。Thread
Executor
@Service
class MyService {
@Autowired
private Executor executor;
public CompletableFuture<?> compute() {
return CompletableFuture.supplyAsync(() -> /* compute value */, executor);
}
}