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

  • 相关阅读:
    [LeetCode] Kth Smallest Element in a BST
    Dojo入门篇
    不要小看了get 与set
    怎样安装Windows7操作系统
    MFC Wizard创建的空应用程序中各个文件内容的解析
    hadoop hdfs空间满后重新启动不了
    树形结构——基本原理
    R语言pdf输出中文乱码处理
    Javascript基本概念梳理
    Java动态代理
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/12929294.html
Copyright © 2020-2023  润新知