线程池 @Async 注解的配置

写一个Executor配置类:

/**
 * Description: 自定义线程池配置类,核心10个, 最大100个
 * User: zhouzhou
 * Date: 2018-10-24
 * Time: 16:20
 */
@Configuration
@EnableAsync
@ConfigurationProperties(prefix = "spring.task.pool")
public class ExecutorConfig {

    /** Set the ThreadPoolExecutor's core pool size. */
    private int corePoolSize ;
    /** Set the ThreadPoolExecutor's maximum pool size. */
    private int maxPoolSize ;
    /** Set the capacity for the ThreadPoolExecutor's BlockingQueue. */
    private int queueCapacity;

    @Bean
    public Executor mySimpleAsync() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setThreadNamePrefix("ZhouZhouExecutor-");
        executor.initialize();
        return executor;
    }

    @Bean
    public Executor excelAsync() { // excel的时候用
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setThreadNamePrefix("ExcelExecutor-");

        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }

    public int getCorePoolSize() {
        return corePoolSize;
    }

    public void setCorePoolSize(int corePoolSize) {
        this.corePoolSize = corePoolSize;
    }

    public int getMaxPoolSize() {
        return maxPoolSize;
    }

    public void setMaxPoolSize(int maxPoolSize) {
        this.maxPoolSize = maxPoolSize;
    }

    public int getQueueCapacity() {
        return queueCapacity;
    }

    public void setQueueCapacity(int queueCapacity) {
        this.queueCapacity = queueCapacity;
    }
}

然后再配置yml文件

# excel解析多线程
spring.task.pool:
  corePoolSize: 10
  maxPoolSize: 100
  queueCapacity: 10

最后调用的时候,是注解@Async后面加上你的配置的executor的bean的名称

@Async("excelAsync")
    public Future<TccResult<ErrorCardOModel>> insertBankCard(BankCardIModel card) {
        TccResult<ErrorCardOModel> result = new TccResult<>();
        .............逻辑
    }

猜你喜欢

转载自blog.csdn.net/weixin_38399962/article/details/83448231