zoukankan      html  css  js  c++  java
  • springboot ThreadPoolTaskExecutor 配置,使用

    springboot ThreadPoolTaskExecutor 配置,使用

    resource文件夹下新建配置文件: executor.properties
    文件内容:
    # 异步线程配置
    # 核心线程数
    async.executor.thread.core_pool_size=5
    # 最大线程数
    async.executor.thread.max_pool_size=8
    # 任务队列大小
    async.executor.thread.queue_capacity=2
    # 线程池中线程的名称前缀
    async.executor.thread.name.prefix=async-service-
    # 缓冲队列中线程的空闲时间
    async.executor.thread.keep_alive_seconds=100

    添加配置类:
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

    import java.util.concurrent.ThreadPoolExecutor;

    @Configuration
    // @PropertySource是找的target目录下classes目录下的文件,resources目录下的文件编译后会生成在classes目录
    @PropertySource(value = {"classpath:executor.properties"}, ignoreResourceNotFound=false, encoding="UTF-8")
    @Slf4j
    public class ExecutorConfig {

    @Value("${async.executor.thread.core_pool_size}")
    private int corePoolSize;
    @Value("${async.executor.thread.max_pool_size}")
    private int maxPoolSize;
    @Value("${async.executor.thread.queue_capacity}")
    private int queueCapacity;
    @Value("${async.executor.thread.name.prefix}")
    private String namePrefix;
    @Value("${async.executor.thread.keep_alive_seconds}")
    private int keepAliveSeconds;

    @Bean(name = "asyncTaskExecutor")
    public ThreadPoolTaskExecutor taskExecutor() {
    log.info("启动");
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    // 核心线程数
    executor.setCorePoolSize(corePoolSize);
    // 最大线程数
    executor.setMaxPoolSize(maxPoolSize);
    // 任务队列大小
    executor.setQueueCapacity(queueCapacity);
    // 线程前缀名
    executor.setThreadNamePrefix(namePrefix);
    // 线程的空闲时间
    executor.setKeepAliveSeconds(keepAliveSeconds);
    // 拒绝策略
    executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
    // 线程初始化
    executor.initialize();
    return executor;
    }
    }

    代码中使用:
    @Autowired
    private ThreadPoolTaskExecutor taskExecutor;

    taskExecutor.execute(() -> {
    try {
    System.out.println("***************你的异步任务写这里************");
    } catch (Exception e) {
    e.printStackTrace();
    }

  • 相关阅读:
    DateTime.Now.ToString("yyyy/MM/dd") 时间格式化中的MM为什么是大写的?
    新入门PGSQL数据库(尝试利用PGPOOL实现分布式),摘录笔记
    MongoDB入门教程之C#驱动操作实例
    使用MongoDB C#官方驱动操作MongoDB
    【OOAD】OOAD概述
    【OOAD】设计模式概述
    【OOAD】面向对象设计原则概述
    【OOAD】OOP的主要特征
    深入浅出设计模式——访问者模式(Visitor Pattern)
    深入浅出设计模式——模板方法模式(Template Method Pattern)
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/12929294.html
Copyright © 2011-2022 走看看