🚀 Spring Boot 2.x 集成 DynamicTp + Nacos 实现动态线程池管理(超详细教程)
完整代码参考gitee:https://gitee.com/xizhyu66/dynamictp-lab
📖 一、什么是 DynamicTp
DynamicTp(Dynamic Thread Pool) 是 Dromara 社区开源的一款 动态可监控线程池框架。
它可以在系统运行时通过配置中心(如 Nacos、Apollo 等)动态调整线程池参数,
并支持 监控、报警、可视化 管理,适合企业级应用中需要稳定性与灵活运维的场景。
核心能力:
- ✅ 动态修改线程池参数(coreSize、maxSize、队列容量、拒绝策略等)
- ✅ 线程池运行时监控与指标采集(Micrometer/Logging/Endpoint)
- ✅ 告警通知(钉钉 / 飞书 / 企业微信 / 邮件)
- ✅ 支持第三方组件线程池:Dubbo、RocketMQ、Tomcat、Netty 等
- ✅ 无缝集成 Spring Boot + Nacos
🧩 二、Maven 依赖引入
在项目的 pom.xml 中引入 DynamicTp 相关依赖。
⚠️ 注意:Spring Boot 2.x 使用
1.2.2版本,Spring Boot 3.x 请使用1.2.2-x。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-dependencies</artifactId>
<version>1.2.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Nacos 集成版本 -->
<dependency>
<groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-spring-boot-starter-nacos</artifactId>
</dependency>
<!-- 可选:监控指标(Prometheus) -->
<!--
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
-->
</dependencies>
⚙️ 三、在 Nacos 中创建线程池配置
新建一个配置文件(dataId 示例):
Data ID: user-center-dtp-dev.yml
Group: DEFAULT_GROUP
内容如下(可直接复制):
dynamictp:
enabled: true
enabledCollect: true
collectorTypes: micrometer,logging
logPath: /home/logs/dynamictp/user-center/
monitorInterval: 5 # 秒,监控周期
# === 告警通知配置 ===
platforms:
- platform: wechat
platformId: 1
urlKey: <your-wecom-webhook-key>
receivers: zhangsan,lisi
- platform: ding
platformId: 2
urlKey: <your-dingtalk-access-token>
secret: <ding-secret>
receivers: 18800000000
- platform: email
platformId: 3
receivers: a@xx.com,b@xx.com
# === 全局默认线程池参数(可被具体线程池覆盖)===
globalExecutorProps:
rejectedHandlerType: CallerRunsPolicy
queueType: VariableLinkedBlockingQueue
waitForTasksToCompleteOnShutdown: true
awaitTerminationSeconds: 3
taskWrapperNames: ["ttl", "mdc"]
queueTimeout: 300
runTimeout: 300
# === 线程池实例定义 ===
executors:
- threadPoolName: dtpExecutor1
threadPoolAliasName: 订单核心池
executorType: common
corePoolSize: 6
maximumPoolSize: 12
queueCapacity: 2000
queueType: VariableLinkedBlockingQueue
rejectedHandlerType: CallerRunsPolicy
keepAliveTime: 60
threadNamePrefix: order-core
allowCoreThreadTimeOut: false
awaitTerminationSeconds: 5
preStartAllCoreThreads: false
runTimeout: 200
queueTimeout: 100
tryInterrupt: false
taskWrapperNames: ["ttl","mdc"]
notifyEnabled: true
platformIds: [1,2,3]
🧾 四、应用配置 application.yml
在你的 Spring Boot 配置文件中加入 Nacos 拉取配置:
nacos:
config:
server-addr: 127.0.0.1:8848
type: yaml
data-ids: user-center-dev.yml,user-center-dtp-dev.yml
auto-refresh: true
group: DEFAULT_GROUP
bootstrap:
enable: true
log-enable: true
🧠 五、启用 DynamicTp
在启动类上添加注解:
@SpringBootApplication
@EnableDynamicTp
public class AppApplication {
public static void main(String[] args) {
SpringApplication.run(AppApplication.class, args);
}
}
在业务中使用线程池:
@Resource
private ThreadPoolExecutor dtpExecutor1;
public void placeOrder() {
dtpExecutor1.execute(() -> {
// your task
System.out.println("订单处理逻辑...");
});
}
📊 六、监控与告警
DynamicTp 支持多种监控方式:
| 监控类型 | 说明 |
|---|---|
| Micrometer | 集成 Prometheus / Grafana |
| Logging | 写入本地 JSON 日志文件 |
| Endpoint | HTTP 接口实时查看(/actuator/dynamictp) |
你可在 Nacos 中配置:
collectorTypes: micrometer,logging,endpoint
然后在浏览器中访问:
http://localhost:8080/actuator/dynamictp 查看线程池运行状态。
🧯 七、常见问题与排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 配置未生效 | dataId 未加载或 auto-refresh 未启用 | 确认 bootstrap.enable=true |
| 无法动态调整参数 | 使用了普通 ThreadPoolExecutor 未纳管 | 使用 @EnableDynamicTp 托管或注册 DtpExecutor |
| 告警未发送 | webhook 配置错误 | 检查 platform.urlKey |
| 动态修改报错 | 使用 LinkedBlockingQueue | 改为 VariableLinkedBlockingQueue |
✅ 八、总结
DynamicTp 让线程池的运行参数、监控、告警全面可控,结合 Nacos 配置中心可实现线程池热更新 + 可视化管理,极大提升系统的可运维性与稳定性。
建议在生产环境中:
- 使用 Prometheus + Grafana 监控池指标
- 打开钉钉/微信告警,及时发现线程池阻塞问题
- 为不同业务模块单独定义线程池,避免互相影响
参考资料:
- DynamicTp 官方文档:https://dynamictp.cn/
- GitHub 地址:https://github.com/dromara/dynamic-tp
2583

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



