|
@ -1,7 +1,11 @@
|
|
|
package com.yihu.wlyy.statistics.config;
|
|
|
|
|
|
import java.util.concurrent.Executor;
|
|
|
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
import org.springframework.scheduling.annotation.EnableAsync;
|
|
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
|
|
|
/**
|
|
|
* Created by Administrator on 2016.10.18.
|
|
@ -9,5 +13,37 @@ import org.springframework.scheduling.annotation.EnableAsync;
|
|
|
*/
|
|
|
@Configuration
|
|
|
@EnableAsync
|
|
|
public class AsyncConfig {
|
|
|
public class AsyncConfig {
|
|
|
/** 如果池中的实际线程数小于corePoolSize,无论是否其中有空闲的线程,都会给新的任务产生新的线程 */
|
|
|
private int corePoolSize = 5;
|
|
|
/** 如果池中的线程数=maximumPoolSize,则有空闲线程使用空闲线程,否则新任务放入queueCapacity. */
|
|
|
private int maxPoolSize = 20;
|
|
|
/** 缓冲队列. */
|
|
|
private int queueCapacity = 10;
|
|
|
@Bean
|
|
|
public Executor dbExtractExecutor() {
|
|
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
|
|
executor.setCorePoolSize(corePoolSize);
|
|
|
executor.setMaxPoolSize(maxPoolSize);
|
|
|
executor.setQueueCapacity(queueCapacity);
|
|
|
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
|
|
|
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
|
|
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
|
|
executor.initialize();
|
|
|
return executor;
|
|
|
}
|
|
|
|
|
|
@Bean
|
|
|
public Executor dbStorageExecutor() {
|
|
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
|
|
executor.setCorePoolSize(corePoolSize);
|
|
|
executor.setMaxPoolSize(maxPoolSize);
|
|
|
executor.setQueueCapacity(queueCapacity);
|
|
|
|
|
|
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
|
|
|
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
|
|
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
|
|
executor.initialize();
|
|
|
return executor;
|
|
|
}
|
|
|
}
|