You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.0 KiB
62 lines
2.0 KiB
package com.ruoyi.framework.config; |
|
|
|
import java.util.concurrent.ScheduledExecutorService; |
|
import java.util.concurrent.ScheduledThreadPoolExecutor; |
|
import java.util.concurrent.ThreadPoolExecutor; |
|
import org.apache.commons.lang3.concurrent.BasicThreadFactory; |
|
import org.springframework.context.annotation.Bean; |
|
import org.springframework.context.annotation.Configuration; |
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
|
import com.ruoyi.common.utils.Threads; |
|
|
|
/** |
|
* 线程池配置 |
|
* |
|
* @author ruoyi |
|
**/ |
|
@Configuration |
|
public class ThreadPoolConfig |
|
{ |
|
// 核心线程池大小 |
|
private int corePoolSize = 50; |
|
|
|
// 最大可创建的线程数 |
|
private int maxPoolSize = 200; |
|
|
|
// 队列最大长度 |
|
private int queueCapacity = 1000; |
|
|
|
// 线程池维护线程所允许的空闲时间 |
|
private int keepAliveSeconds = 300; |
|
|
|
@Bean(name = "threadPoolTaskExecutor") |
|
public ThreadPoolTaskExecutor threadPoolTaskExecutor() |
|
{ |
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); |
|
executor.setMaxPoolSize(maxPoolSize); |
|
executor.setCorePoolSize(corePoolSize); |
|
executor.setQueueCapacity(queueCapacity); |
|
executor.setKeepAliveSeconds(keepAliveSeconds); |
|
// 线程池对拒绝任务(无线程可用)的处理策略 |
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); |
|
return executor; |
|
} |
|
|
|
/** |
|
* 执行周期性或定时任务 |
|
*/ |
|
@Bean(name = "scheduledExecutorService") |
|
protected ScheduledExecutorService scheduledExecutorService() |
|
{ |
|
return new ScheduledThreadPoolExecutor(corePoolSize, |
|
new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build()) |
|
{ |
|
@Override |
|
protected void afterExecute(Runnable r, Throwable t) |
|
{ |
|
super.afterExecute(r, t); |
|
Threads.printException(r, t); |
|
} |
|
}; |
|
} |
|
}
|
|
|