Просмотр исходного кода

[线程][修改]:线程池限定大小

release
Stormeye Wu 7 лет назад
Родитель
Сommit
2e5018dc1a
1 измененных файлов: 56 добавлений и 0 удалений
  1. +56
    -0
      mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java

+ 56
- 0
mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java Просмотреть файл

@@ -0,0 +1,56 @@
package com.iformall.config;


import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Method;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;

@Component
public class AsyncConfig implements AsyncConfigurer {
private Logger logger = LoggerFactory.getLogger(getClass());

@Value("${thread.pool.corePoolSize:10}")
private int corePoolSize;

@Value("${thread.pool.maxPoolSize:20}")
private int maxPoolSize;

@Value("${thread.pool.keepAliveSeconds:4}")
private int keepAliveSeconds;

@Value("${thread.pool.queueCapacity:512}")
private int queueCapacity;

@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setKeepAliveSeconds(keepAliveSeconds);
executor.setQueueCapacity(queueCapacity);
executor.setRejectedExecutionHandler((Runnable r, ThreadPoolExecutor exe) -> {
logger.warn("当前任务线程池队列已满.");
});
executor.initialize();
return executor;
}

@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new AsyncUncaughtExceptionHandler() {
@Override
public void handleUncaughtException(Throwable ex, Method method, Object... params) {
logger.error("线程池执行任务发生未知异常.", ex);
}
};
}
}

Загрузка…
Отмена
Сохранить