package com.vci.starter.web.autoconfigure;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
import org.springframework.util.concurrent.ListenableFuture;
|
|
import java.util.concurrent.Callable;
|
import java.util.concurrent.Future;
|
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* 线程池,增加监控
|
* @author weidy
|
* @date 2021-2-2
|
*/
|
public class VciThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
|
|
/**
|
* 日志
|
*/
|
private static final Logger logger = LoggerFactory.getLogger(VciThreadPoolTaskExecutor.class);
|
|
/**
|
* 打印日志
|
* @param prefix 前缀
|
*/
|
private void printLog(String prefix){
|
ThreadPoolExecutor threadPoolExecutor = getThreadPoolExecutor();
|
if (null == threadPoolExecutor) {
|
return;
|
}
|
logger.info(prefix + ", task_count [" + threadPoolExecutor.getTaskCount()
|
+ "], completed_task_count [" + threadPoolExecutor.getCompletedTaskCount()
|
+ "], active_thread_count [" + threadPoolExecutor.getActiveCount()
|
+ "], blocking_queue_size [" + threadPoolExecutor.getQueue().size()
|
+ "], thread_pool_size [" + threadPoolExecutor.getPoolSize()
|
+ "], largest_pool_size_ever [" + threadPoolExecutor.getLargestPoolSize()
|
+ "], core_thread_pool_size [" + threadPoolExecutor.getCorePoolSize()
|
+ "], max_thread_pool_size [" + threadPoolExecutor.getMaximumPoolSize()
|
+ "], thread_keep_alive_time [" + threadPoolExecutor.getKeepAliveTime(TimeUnit.SECONDS)
|
+ "]");
|
}
|
|
/**
|
* 执行
|
* @param task 任务的对象
|
*/
|
@Override
|
public void execute(Runnable task) {
|
printLog("1. do execute 执行任务");
|
super.execute(task);
|
}
|
|
/**
|
* 执行任务,并设置超时
|
* @param task 任务的对象
|
* @param startTimeout 超时
|
*/
|
@Override
|
public void execute(Runnable task, long startTimeout) {
|
printLog("2. do execute,执行任务,并且设置超时" );
|
super.execute(task, startTimeout);
|
}
|
|
/**
|
* 提交
|
* @param task 任务
|
* @return 执行
|
*/
|
@Override
|
public Future<?> submit(Runnable task) {
|
printLog("1. do submit,提交");
|
return super.submit(task);
|
}
|
|
/**
|
* 提交
|
* @param task 任务
|
* @param <T> 类型
|
* @return 类型
|
*/
|
@Override
|
public <T> Future<T> submit(Callable<T> task) {
|
printLog("2. do submit");
|
return super.submit(task);
|
}
|
|
/**
|
* 提交可监听
|
* @param task 任务
|
* @return 监听
|
*/
|
@Override
|
public ListenableFuture<?> submitListenable(Runnable task) {
|
printLog("1. do submitListenable");
|
return super.submitListenable(task);
|
}
|
|
/**
|
* 提交可监听
|
* @param task 任务
|
* @param <T> 类型
|
* @return 监听的类型
|
*/
|
@Override
|
public <T> ListenableFuture<T> submitListenable(Callable<T> task) {
|
printLog("2. do submitListenable");
|
return super.submitListenable(task);
|
}
|
|
}
|