9 changed files with 194 additions and 12 deletions
@ -0,0 +1,49 @@ |
|||||
|
package com.epmet.config; |
||||
|
|
||||
|
import com.epmet.properties.ThreadProperties; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties; |
||||
|
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.Executor; |
||||
|
import java.util.concurrent.ExecutorService; |
||||
|
import java.util.concurrent.ThreadPoolExecutor; |
||||
|
|
||||
|
/** |
||||
|
* 线程池配置类 |
||||
|
*/ |
||||
|
@Configuration |
||||
|
@EnableConfigurationProperties(ThreadProperties.class) |
||||
|
@EnableAsync |
||||
|
public class AsyncConfig { |
||||
|
|
||||
|
@Autowired |
||||
|
private ThreadProperties threadProperties; |
||||
|
|
||||
|
@Bean |
||||
|
public Executor executor() { |
||||
|
ThreadProperties.ThreadPoolProperties threadPoolProps = threadProperties.getThreadPool(); |
||||
|
|
||||
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); |
||||
|
executor.setCorePoolSize(threadPoolProps.getCorePoolSize()); |
||||
|
executor.setMaxPoolSize(threadPoolProps.getMaxPoolSize()); |
||||
|
executor.setQueueCapacity(threadPoolProps.getQueueCapacity()); |
||||
|
executor.setThreadNamePrefix("epmet-point-"); |
||||
|
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
|
||||
|
// CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
|
||||
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //对拒绝task的处理策略
|
||||
|
executor.setKeepAliveSeconds(threadPoolProps.getKeepAlive()); |
||||
|
executor.initialize(); |
||||
|
return executor; |
||||
|
} |
||||
|
|
||||
|
@Bean |
||||
|
public ExecutorService executorService() { |
||||
|
ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) executor(); |
||||
|
return executor.getThreadPoolExecutor(); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
package com.epmet.properties; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
import org.springframework.boot.context.properties.ConfigurationProperties; |
||||
|
|
||||
|
/** |
||||
|
* 线程池属性类 |
||||
|
*/ |
||||
|
@ConfigurationProperties(prefix = "thread") |
||||
|
@Data |
||||
|
public class ThreadProperties { |
||||
|
|
||||
|
private ThreadPoolProperties threadPool; |
||||
|
|
||||
|
@Data |
||||
|
public static class ThreadPoolProperties { |
||||
|
private int corePoolSize; |
||||
|
private int maxPoolSize; |
||||
|
private int queueCapacity; |
||||
|
private int keepAlive; |
||||
|
|
||||
|
public ThreadPoolProperties() { |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue