| 
					
				 | 
			
			
				@@ -0,0 +1,69 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.ruoyi.framework.manager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @Description TODO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @Author liqinglong 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @DateTime 2021-07-02 17:36 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @Version 1.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class VisiableThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final Logger logger = LoggerFactory.getLogger(VisiableThreadPoolTaskExecutor.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void showThreadPoolInfo(String prefix){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ThreadPoolExecutor threadPoolExecutor = getThreadPoolExecutor(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(null == threadPoolExecutor){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logger.info("{},{},taskCount [{}],completedTaskCount [{}],activeCount [{}],queueSize[{}]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.getThreadNamePrefix(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prefix, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                threadPoolExecutor.getTaskCount(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                threadPoolExecutor.getCompletedTaskCount(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                threadPoolExecutor.getActiveCount(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                threadPoolExecutor.getQueue().size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void execute(Runnable task) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        showThreadPoolInfo("1.do execute"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        super.execute(task); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void execute(Runnable task, long startTimeout) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        showThreadPoolInfo("2.do execute"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        super.execute(task, startTimeout); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Future<?> submit(Runnable task) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        showThreadPoolInfo("1.do submit"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return super.submit(task); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public <T> Future<T> submit(Callable<T> task) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        showThreadPoolInfo("2.do submit"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return super.submit(task); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public ListenableFuture<?> submitListenable(Runnable task) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        showThreadPoolInfo("1.do submitListenable"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return super.submitListenable(task); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public <T> ListenableFuture<T> submitListenable(Callable<T> task) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        showThreadPoolInfo("2.do submitListenable"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return super.submitListenable(task); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |