线程池的配置说明

application:
  config:
    threadpool:
      ExecutorPool:
        corePoolSize: 16
        maxPoolSize: 64
        queueCapacity: 128

使用类取继承该类指向的线程池:

@Override
public void afterPropertiesSet() throws Exception {
executor = applicationThreadPoolFactory.newExecutor("ExecutorPool");
}
@Resource
    private ConfigReader configReader;
    
    @Resource
    private TransactionRejectedExecutionHandler rejectedHandler;
    
    public ApplicationThreadPoolConfig getPoolConfig(String namePrefix){
        Integer corePoolSize = configReader.getProperty("threadpool."+namePrefix, "corePoolSize", Integer.class, 20);
        Integer maxPoolSize = configReader.getProperty("threadpool."+namePrefix, "maxPoolSize", Integer.class, 40);
        Integer queueCapacity = configReader.getProperty("threadpool."+namePrefix, "queueCapacity", Integer.class, 10);
        looger.info("##ThreadPoll -- Config: {}; corePoolSize={}", namePrefix, corePoolSize);
        looger.info("##ThreadPoll -- Config: {}; maxPoolSize={}", namePrefix, maxPoolSize);
        looger.info("##ThreadPoll -- Config: {}; queueCapacity={}", namePrefix, queueCapacity);
        ApplicationThreadPoolConfig config = new ApplicationThreadPoolConfig();
        config.setCorePoolSize(corePoolSize);
        config.setMaxPoolSize(maxPoolSize);
        config.setQueueCapacity(queueCapacity);
        return config;
    }
    
    
    public Executor newExecutor(String namePrefix, int corePoolSize, int maxPoolSize, int queuedSize) {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queuedSize);
        executor.setThreadNamePrefix(namePrefix);
        executor.setRejectedExecutionHandler(rejectedHandler);
        executor.initialize();
        return executor;
    }

    public Executor newExecutor(String namePrefix) {
        ApplicationThreadPoolConfig poolConfig = getPoolConfig(namePrefix);
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(poolConfig.getCorePoolSize());
        executor.setMaxPoolSize(poolConfig.getMaxPoolSize());
        executor.setQueueCapacity(poolConfig.getQueueCapacity());
        executor.setThreadNamePrefix(namePrefix);
        executor.setRejectedExecutionHandler(rejectedHandler);
        executor.initialize();
        return executor;
    }
//获取环境变量配置的类
public
class ConfigReader { public static final String PREDIX = "application.config"; @Resource private Environment env; public String getProperty (String scope, String key) { key = Strings.join(new String[]{PREDIX, scope, key}, "."); return env.getProperty(key); } public String getRequiredProperty (String scope, String key) { key = Strings.join(new String[]{PREDIX, scope, key}, "."); return env.getRequiredProperty(key); } public String getProperty (String scope, String key, String defaultValue) { key = Strings.join(new String[]{PREDIX, scope, key}, "."); return env.getProperty(key, defaultValue); } public <T> T getProperty (String scope, String key, Class<T> targetType, T defaultValue) { key = Strings.join(new String[]{PREDIX, scope, key}, "."); return env.getProperty(key, targetType, defaultValue); } public <T> T getRequiredProperty (String scope, String key, Class<T> targetType, T defaultValue) { key = Strings.join(new String[]{PREDIX, scope, key}, "."); return env.getProperty(key, targetType, defaultValue); } }
原文地址:https://www.cnblogs.com/otways/p/11196693.html