弹簧靴。如何创建带注解的TaskExecutor?

新手上路,请多包涵

我在 Spring Boot 应用程序中做了一个 @Service 类,其中一种方法应该异步运行。正如我所读的方法应该是 @Async 注释并且我还必须运行一个 TaskExecutor bean。但是在 Spring 手册 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html 我找不到任何信息或示例如何运行 TaskExecutor 带注释, 没有 XML 配置。是否可以在没有 XML 且仅带有注释的 Spring Boot 中创建 TaskExecutor bean?这是我的服务类:

 @Service
public class CatalogPageServiceImpl implements CatalogPageService {

    @Override
    public void processPagesList(List<CatalogPage> catalogPageList) {
        for (CatalogPage catalogPage:catalogPageList){
            processPage(catalogPage);
        }
    }

    @Override
    @Async("locationPageExecutor")
    public void processPage(CatalogPage catalogPage) {
        System.out.println("print from Async method "+catalogPage.getUrl());
    }
}

原文由 Pavlo Morozov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 331
2 个回答

@Bean 方法添加到您的 Spring Boot 应用程序类:

 @SpringBootApplication
@EnableAsync
public class MySpringBootApp {

    @Bean
    public TaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(25);
        return executor;
    }

    public static void main(String[] args) {
        // ...
    }
}

请参阅 Spring Framework 参考文档中 基于 Java 的容器配置,了解如何使用 Java 配置而不是 XML 配置 Spring。

(注意:您不需要将 @Configuration 添加到类中,因为 @SpringBootApplication 已经包含 @Configuration )。

原文由 Jesper 发布,翻译遵循 CC BY-SA 4.0 许可协议

首先——让我们回顾一下规则——@Async 有两个限制:

  • 它只能应用于公共方法
  • 自调用——从同一个类中调用异步方法——将不起作用

所以你的 processPage() 方法应该在单独的类中

原文由 Igor Shevchenko 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题