背景
这篇文章的主要核心原理都来自于这个开源项目dynamic-tp,可以说是对这个开源项目的源码分析,也是对这个开源项目中涉及到的技术点进行学习总结。
从这篇文章中能学到的技术点
从这篇文章中能学到的技术点,也就是从这个dynamic-tp开源项目中学习到的技术点(这里只列举了这个项目的冰山一角):
- 利用Nacos作为配置中心,动态监听Nacos配置变更。
- 项目启动之初获取Nacos配置,将yml文件中配置的线程池注册到IOC容器中。这里在文章的最后再介绍,利用Spring提供的扩展点。
- .yml文件映射到具体的对象中,对比是否有变更。
- Spring提供的扩展点学习。
那我们开始吧
以下都是对dynamic-tp这个开源项目进行了简化,首先看一下我的Nacos配置以及配置类:
spring:
dynamic:
tp:
enabled: true
executors:
- threadPoolName: commonExecutor
corePoolSize: 2
maximumPoolSize: 8
queueCapacity: 200
keepAliveTime: 50
allowCoreThreadTimeOut: false
- threadPoolName: dynamicThreadPoolExecutor1
corePoolSize: 4
maximumPoolSize: 6
queueCapacity: 400
keepAliveTime: 50
allowCoreThreadTimeOut: false
@Data
@ConfigurationProperties(prefix = "spring.dynamic.tp")
public class DynamicThreadPoolProperties {
/**
* 是否开始动态配置
*/
private boolean enabled = true;
/**
* 线程池基础配置
*/
private List<ThreadPoolProperties> executors;
}
@Data
public class ThreadPoolProperties {
/**
* 线程池的名称
*/
private String threadPoolName;
/**
* 核心线程数
*/
private int corePoolSize = 1;
/**
* 最大线程数
*/
private int maximumPoolSize = DynamicThreadPoolConst.AVAILABLE_PROCESSORS;
/**
* 线程队列数
*/
private int queueCapacity = 1024;
/**
* 是否允许核心线程超时
*/
private boolean allowCoreThreadTimeOut = false;
/**
* 超时时间
*/
private long keepAliveTime = 30;
/**
* Timeout unit.
*/
private TimeUnit timeUnit = TimeUnit.SECONDS;
}
上面这个技术点就不用多说了吧,yml文件配置的内容会映射到DynamicThreadPoolProperties类中,多个的话会映射成集合的形式。
介绍完了基础的配置,那我们开始介绍核心一点东西:监听Nacos配置变更的事件。
监听Nacos配置变更的方式有多种,可以使用实现 ApplicationListener<NacosConfigReceivedEvent>的方式也可以使用注解@NacosConfigListener。
下面我们就使用实现 ApplicationListener<NacosConfigReceivedEvent>的方式:
@Component
public class NacosRefresher extends AbstractRefresher implements ApplicationListener<NacosConfigReceivedEvent> {
@Override
public void onApplicationEvent(NacosConfigRece
动态配置线程池:Nacos+Spring实现配置变更监听

最低0.47元/天 解锁文章
409

被折叠的 条评论
为什么被折叠?



