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

  • 相关阅读:
    《基于B_S模式的教务管理系统设计与实现》论文笔记(三)
    《重修补考报名考务管理信息系统中的网络技术》论文笔记(二)
    《基于WEB的独立学院补考重修管理系统研究》论文笔记(一)
    重修安排管理系统的设计与实现 文献收集
    重修安排管理系统的设计与实现 文献收集
    《暗时间》读书笔记
    R、Python、Scala 和 Java,到底该使用哪一种大数据编程语言?
    编程和音乐真的很像吗?
    关于虚拟现实叙事方式的终极入门指南
    如何避免脆弱的代码
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/12929294.html
Copyright © 2011-2022 走看看