线程池的配置说明
application:config:threadpool:ExecutorPool:corePoolSize: 16maxPoolSize: 64queueCapacity: 128
public void afterPropertiesSet() throws Exception {
executor = applicationThreadPoolFactory.newExecutor("ExecutorPool");
} @Resourceprivate ConfigReader configReader;@Resourceprivate 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";@Resourceprivate 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);} }
使用類取繼承該類指向的線程池:
@Overridepublic void afterPropertiesSet() throws Exception {
executor = applicationThreadPoolFactory.newExecutor("ExecutorPool");
} @Resourceprivate ConfigReader configReader;@Resourceprivate 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";@Resourceprivate 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
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 20 道 Spring Boot 面试题
- 下一篇: MSSQL 从备份文件还原数据库脚本