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

  • 相关阅读:
    GitLab用户权限管理
    类似vant中的tab实现
    Gitgitee/github/gitlab账号分离
    Vim操作
    partition by 用法
    crontab执行feat_gen.sh时,报错找不到pyspark
    SQL同一个字段出现null和0值,有何区别,原因是什么?left join导致null值出现,case when导致0值出现
    linux 定时任务crontab的用法
    卡方检验
    ROC与AUC
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/12929294.html
Copyright © 2020-2023  润新知