我认为CompletableFuture和@Async都运行良好。我更喜欢@Async,因为它在大多数功能上更像Spring的工作方式。
您可以为@Async配置线程执行器,如下所示:
@Configuration
@EnableAsync
public class SpringAsyncConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.initialize();
return threadPoolTaskExecutor;
}
}
关于第二个问题,我认为当async方法完成时,可以使用spring RestTemplate或WebClient来调用callback_url。
在这两种情况下,使用@Async或Completable Future,可以使用Future类来验证处理何时完成。
Future<Object> future = asyncService.asyncMethod();