弹簧靴。如何使用注释创建任务执行器?

2022-09-01 18:16:22

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

@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());
    }
}

答案 1

向 Spring Boot 应用程序类中添加一个方法:@Bean

@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框架参考文档中的基于Java的容器配置,了解如何使用Java配置而不是XML来配置Spring。

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


答案 2

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

  • 它必须仅应用于公共方法
  • 自调用 – 从同一类中调用异步方法 – 将不起作用

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


推荐