All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ideaaedi.commonspring.threadpool.ThreadPoolBuilder Maven / Gradle / Ivy

The newest version!
package com.ideaaedi.commonspring.threadpool;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.task.TaskDecorator;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadFactory;

/**
 * 线程池配置
 * 

* 示例: *
 *   import com.ideaaedi.commonspring.decorator.MDCTaskDecorator;
 *   import com.ideaaedi.commonspring.threadpool.ThreadPoolBuilder;
 *   import org.springframework.context.annotation.Bean;
 *   import org.springframework.context.annotation.Configuration;
 *   import org.springframework.scheduling.annotation.EnableAsync;
 *   import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 *
 *   import java.util.concurrent.ThreadPoolExecutor;
 *
 *
 *  \@EnableAsync
 *  \@Configuration
 *  public class ThreadPoolConfig {
 *
 *      public static final String MINE_EXECUTOR_NAME = "mineExecutor";
 *
 *      \@Bean(MINE_EXECUTOR_NAME)
 *      public ThreadPoolTaskExecutor mineExecutor() {
 *          int processors = Runtime.getRuntime().availableProcessors();
 *          return ThreadPoolBuilder.builder()
 *                  .corePoolSize(2 * processors + 1)
 *                  .maxPoolSize(100)
 *                  .queueCapacity(500)
 *                  .keepAliveSeconds(60)
 *                  .threadNamePrefix("rpc-log-recorder-")
 *                  .rejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy())
 *                  .taskDecorator(new MDCTaskDecorator())
 *                  .buildAndInitialize();
 *      }
 *  }
 * 
* * @author JustryDeng * @since 1.0.0 */ public class ThreadPoolBuilder { /** 核心线程数 */ @Getter @Setter(AccessLevel.PRIVATE) private Integer corePoolSize; /** 最大线程数 */ @Getter @Setter(AccessLevel.PRIVATE) private Integer maxPoolSize; /** 活跃时长 */ @Getter @Setter(AccessLevel.PRIVATE) private Integer keepAliveSeconds; /** 队列容量 */ @Getter @Setter(AccessLevel.PRIVATE) private Integer queueCapacity; /** 线程名前缀 */ @Getter @Setter(AccessLevel.PRIVATE) private String threadNamePrefix; /** 线程装饰器 */ @Getter @Setter(AccessLevel.PRIVATE) private TaskDecorator taskDecorator; /** 拒绝策略 */ @Getter @Setter(AccessLevel.PRIVATE) private RejectedExecutionHandler rejectedExecutionHandler; @Getter @Setter(AccessLevel.PRIVATE) private Boolean allowCoreThreadTimeOut; @Getter @Setter(AccessLevel.PRIVATE) private Integer awaitTerminationSeconds; @Getter @Setter(AccessLevel.PRIVATE) private Boolean daemon; @Getter @Setter(AccessLevel.PRIVATE) private String beanName; @Getter @Setter(AccessLevel.PRIVATE) private ThreadFactory threadFactory; @Getter @Setter(AccessLevel.PRIVATE) private ThreadGroup threadGroup; @Getter @Setter(AccessLevel.PRIVATE) private Integer threadPriority; @Getter @Setter(AccessLevel.PRIVATE) private Boolean waitForJobsToCompleteOnShutdown; public ThreadPoolBuilder allowCoreThreadTimeOut(boolean allowCoreThreadTimeOut) { this.setAllowCoreThreadTimeOut(allowCoreThreadTimeOut); return this; } public ThreadPoolBuilder daemon(boolean daemon) { this.setDaemon(daemon); return this; } public ThreadPoolBuilder awaitTerminationSeconds(int awaitTerminationSeconds) { this.setAwaitTerminationSeconds(awaitTerminationSeconds); return this; } public ThreadPoolBuilder beanName(String beanName) { this.setBeanName(beanName); return this; } public ThreadPoolBuilder threadFactory(ThreadFactory threadFactory) { this.setThreadFactory(threadFactory); return this; } public ThreadPoolBuilder threadGroup(ThreadGroup threadGroup) { this.setThreadGroup(threadGroup); return this; } public ThreadPoolBuilder threadPriority(int threadPriority) { this.setThreadPriority(threadPriority); return this; } public ThreadPoolBuilder waitForJobsToCompleteOnShutdown(boolean waitForJobsToCompleteOnShutdown) { this.setWaitForJobsToCompleteOnShutdown(waitForJobsToCompleteOnShutdown); return this; } public static ThreadPoolBuilder builder() { return new ThreadPoolBuilder(); } public ThreadPoolBuilder corePoolSize(int corePoolSize) { this.setCorePoolSize(corePoolSize); return this; } public ThreadPoolBuilder maxPoolSize(int maxPoolSize) { this.setMaxPoolSize(maxPoolSize); return this; } public ThreadPoolBuilder keepAliveSeconds(int keepAliveSeconds) { this.setKeepAliveSeconds(keepAliveSeconds); return this; } public ThreadPoolBuilder queueCapacity(int queueCapacity) { this.setQueueCapacity(queueCapacity); return this; } public ThreadPoolBuilder threadNamePrefix(String threadNamePrefix) { this.setThreadNamePrefix(threadNamePrefix); return this; } public ThreadPoolBuilder taskDecorator(TaskDecorator taskDecorator) { this.setTaskDecorator(taskDecorator); return this; } public ThreadPoolBuilder rejectedExecutionHandler(RejectedExecutionHandler rejectedExecutionHandler) { this.setRejectedExecutionHandler(rejectedExecutionHandler); return this; } /** * 构建并初始化 */ public ThreadPoolTaskExecutor buildAndInitialize() { ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); Integer corePoolSize = this.getCorePoolSize(); if (corePoolSize != null) { threadPoolTaskExecutor.setCorePoolSize(corePoolSize); } Integer maxPoolSize = this.getMaxPoolSize(); if (maxPoolSize != null) { threadPoolTaskExecutor.setMaxPoolSize(maxPoolSize); } Integer keepAliveSeconds = this.getKeepAliveSeconds(); if (keepAliveSeconds != null) { threadPoolTaskExecutor.setKeepAliveSeconds(keepAliveSeconds); } Integer queueCapacity = this.getQueueCapacity(); if (queueCapacity != null) { threadPoolTaskExecutor.setQueueCapacity(queueCapacity); } String threadNamePrefix = this.getThreadNamePrefix(); if (StringUtils.isNotEmpty(threadNamePrefix)) { threadPoolTaskExecutor.setThreadNamePrefix(threadNamePrefix); } TaskDecorator taskDecorator = this.getTaskDecorator(); if (taskDecorator != null) { threadPoolTaskExecutor.setTaskDecorator(taskDecorator); } RejectedExecutionHandler rejectedExecutionHandler = this.getRejectedExecutionHandler(); if (rejectedExecutionHandler != null) { threadPoolTaskExecutor.setRejectedExecutionHandler(rejectedExecutionHandler); } Boolean allowCoreThreadTimeOut = this.getAllowCoreThreadTimeOut(); if (allowCoreThreadTimeOut != null) { threadPoolTaskExecutor.setAllowCoreThreadTimeOut(allowCoreThreadTimeOut); } Integer awaitTerminationSeconds = this.getAwaitTerminationSeconds(); if (awaitTerminationSeconds != null) { threadPoolTaskExecutor.setAwaitTerminationSeconds(awaitTerminationSeconds); } Boolean daemon = this.getDaemon(); if (daemon != null) { threadPoolTaskExecutor.setDaemon(daemon); } String beanName = this.getBeanName(); if (beanName != null) { threadPoolTaskExecutor.setBeanName(beanName); } ThreadFactory threadFactory = this.getThreadFactory(); if (threadFactory != null) { threadPoolTaskExecutor.setThreadFactory(threadFactory); } ThreadGroup threadGroup = this.getThreadGroup(); if (threadGroup != null) { threadPoolTaskExecutor.setThreadGroup(threadGroup); } Integer threadPriority = this.getThreadPriority(); if (threadPriority != null) { threadPoolTaskExecutor.setThreadPriority(threadPriority); } Boolean waitForJobsToCompleteOnShutdown = this.getWaitForJobsToCompleteOnShutdown(); if (waitForJobsToCompleteOnShutdown != null) { threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(waitForJobsToCompleteOnShutdown); } threadPoolTaskExecutor.initialize(); return threadPoolTaskExecutor; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy