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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM