7 changed files with 175 additions and 1 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("data-stats-"); | 
				
			|||
        // 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