content: 
  package com.platform.config.thread;
  
  import lombok.extern.slf4j.Slf4j;
  import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.scheduling.annotation.AsyncConfigurer;
  import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
  import java.util.concurrent.Executor;
  import java.util.concurrent.ThreadPoolExecutor;
  
  /**
   * 异步任务线程池装配类
   * @author https://juejin.im/entry/5abb8f6951882555677e9da2
   * @date 2023-01-27 15:06:18
   */
  @Slf4j
  @Configuration
  public class AsyncTaskExecutePool implements AsyncConfigurer {
  
      @Override
      public Executor getAsyncExecutor() {
          ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
          //核心线程池大小
          executor.setCorePoolSize(AsyncTaskProperties.corePoolSize);
          //最大线程数
          executor.setMaxPoolSize(AsyncTaskProperties.maxPoolSize);
          //队列容量
          executor.setQueueCapacity(AsyncTaskProperties.queueCapacity);
          //活跃时间
          executor.setKeepAliveSeconds(AsyncTaskProperties.keepAliveSeconds);
          //线程工厂
          executor.setThreadFactory(new TheadFactoryName("el-async"));
          // setRejectedExecutionHandler：当pool已经达到max size的时候，如何处理新任务
          // CallerRunsPolicy：不在新线程中执行任务，而是由调用者所在的线程来执行
          executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
          executor.initialize();
          return executor;
      }
  
      @Override
      public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
          return (throwable, method, objects) -> {
              log.error("===="+throwable.getMessage()+"====", throwable);
              log.error("exception method:"+method.getName());
          };
      }
  }
  