@async Spring Boot 中未按预期工作

@async not working as expected in spring boot

提问人:yashwardhan s 提问时间:10/30/2023 更新时间:10/30/2023 访问量:43

问:

我正在尝试进行并行休息调用。

我在类本身中设置了这样的执行器。

ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(25);
        executor.setQueueCapacity(100);
        executor.initialize();
        executor.setThreadNamePrefix("Async-");

我像这样把它传递到我可完成的未来中。

List<CompletableFuture<String>> futures = urls.stream()
                .map( url -> CompletableFuture.supplyAsync(() -> function(url,start), executor))
                .toList();

这按预期工作。预期

现在,当我尝试使用@async注释时,它无法按预期工作,我没有执行器对象通过异步调用传递它,因此它不使用我的执行器。我是springboot的新手,所以我不确定bean是如何工作的。

List<CompletableFuture<String>> futures = urls.stream()
                .map( url -> CompletableFuture.supplyAsync(() -> function(url,start)))
                .toList();

这是我的异步配置文件

@Configuration
@EnableAsync
public class AsyncConfiguration  {
    @Bean
    public Executor asyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(25);
        executor.setQueueCapacity(100);
        executor.initialize();
        executor.setThreadNamePrefix("Async-");
        return executor;
    }
}


实际输出

我该如何解决这个问题?

java spring-boot 异步 completable-future

评论

0赞 Serghei Motpan 10/30/2023
这是关于如何将@Async与 CompletableFuture 一起使用的春季指南 spring.io/guides/gs/async-method

答:

1赞 Bob 10/30/2023 #1

@EnableAsync应在使用的类中进行注释,或者 .@AsyncMainApplication

例如

@Service
@EnableAsync
public class TestService{

  @Async
  public void doAsync() {
    // ...
  }

}