我想在方法上使用@Async
注解来异步运行它。我已经定义了我的ThreadExecutor
如下:
@Bean("threadPoolTaskExecutor")
public TaskExecutor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(20);
executor.setMaxPoolSize(200);
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setAwaitTerminationSeconds(30);
executor.setThreadNamePrefix("async-");
executor.setQueueCapacity(50);
executor.initialize();
return executor;
}
我的问题是,对于使用@Async
注解的方法,是否必须使用CompletableFuture
作为返回类型?如果我的第三方REST调用返回不同的/Custom类型,它是否有效?例如,
@Async("threadPoolTaskExecutor")
public ResponseDTO getCapa(final List<String> vins) {
for (String vin : vins) {
CapabilityDTO capabilityDTO = new CapabilityDTO();
// call third party
Optional<ResponseDTO> response=thirdPartyClient.getInfo();
..........
return response.get();
}
}
或者必须使用CompletableFuture<ResponseDTO>
??
1条答案
按热度按时间vohkndzv1#
根据the Spring Async javadoc:
返回类型被限制为
void
或Future
。在后一种情况下,您可以声明更具体的ListenableFuture
或CompletableFuture
类型,这允许与异步任务进行更丰富的交互,并允许立即组合进一步的处理步骤。实际上,我相信如果声明另一个类型,调用者将收到一个
null
值,因为在调用时没有可用的值,它必须立即返回,因此调用者将无法检索结果。