李锋镝的博客

  • 首页
  • 时间轴
  • 插件
  • 评论区显眼包🔥
  • 左邻右舍
  • 博友圈
  • 关于我
    • 关于我
    • 另一个网站
    • 我的导航站
    • 网站地图
  • 留言
  • 赞助
Destiny
自是人生长恨水长东
  1. 首页
  2. 原创
  3. 正文

动态线程池 DynamicTp 的使用方法

2025年3月6日 72点热度 0人点赞 0条评论

动态线程池DynamicTp是一个基于配置中心实现的轻量级动态线程池监控管理工具,可对 Java 线程池进行动态管理和监控。

特性

  • 代码零侵入:所有配置放在配置中心,服务启动时拉取配置生成线程池对象放入 Spring 容器,使用时从容器获取,不影响业务代码。
  • 通知告警:提供配置变更、活性、容量阈值、拒绝触发、任务执行或等待超时等多种报警维度,支持企业微信、钉钉、飞书、邮件等报警方式,还可通过 SPI 接口自定义扩展。
  • 运行监控:定时采集 20 多种线程池指标数据,支持 MicroMeter、JsonLog 日志输出、Endpoint 等方式展示,也可通过 SPI 接口自定义扩展。
  • 任务增强:提供任务包装功能,实现 TaskWrapper 接口即可,如 MdcTaskWrapper 等,可支持线程池上下文信息传递。
  • 多配置中心支持:已支持 Nacos、Apollo、Zookeeper、Consul、Etcd、Polaris、ServiceComb 等,也提供 SPI 接口自定义扩展。
  • 中间件线程池管理:集成管理 Tomcat、Jetty、Dubbo、RocketMq 等常用第三方组件的线程池,实现调参、监控报警等功能。
  • 轻量简单:基于 SpringBoot 实现,引入 starter,接入简单。
  • 多模式:有增强线程池 DtpExecutor、IO 密集型 EagerDtpExecutor、调度线程池 ScheduledDtpExecutor、有序线程池 OrderedDtpExecutor 等多种模式。
  • 兼容性:JUC 普通线程池和 Spring 中的 ThreadPoolTaskExecutor 加 @DynamicTp 注解可被框架管理。
  • 可靠性:实现 Spring 生命周期方法,在 Spring 容器关闭前尽可能处理队列中的任务。
  • 高可扩展:核心功能都提供 SPI 接口,方便用户自定义个性化实现。

使用方法

1. 添加依赖

如果你使用的是 Maven 项目,在 pom.xml 中添加以下依赖:

<dependency>
    <groupId>org.dromara.dynamictp</groupId>
    <artifactId>dynamic-tp-spring-boot-starter</artifactId>
    <version>1.1.5</version>
</dependency>

这里以 1.1.5 版本为例,你可以根据实际情况选择合适的版本。

2. 配置线程池

2.1 基于 Nacos 配置中心

首先,添加 Nacos 相关依赖:

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.10</version>
</dependency>

然后在 application.properties 或 application.yml 中配置 Nacos 信息:

spring:
  application:
    name: your-application-name
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml

在 Nacos 控制台创建一个配置文件,内容如下:

spring:
  dynamic:
    tp:
      enabled: true
      executors:
        - threadPoolName: dtpExecutor1
          corePoolSize: 10
          maximumPoolSize: 20
          queueCapacity: 200
          keepAliveTime: 60
          unit: seconds

这里定义了一个名为 dtpExecutor1 的线程池,核心线程数为 10,最大线程数为 20,队列容量为 200 等。

2.2 基于本地配置

如果你不想使用配置中心,也可以在 application.yml 中直接配置:

spring:
  dynamic:
    tp:
      enabled: true
      executors:
        - threadPoolName: dtpExecutor1
          corePoolSize: 10
          maximumPoolSize: 20
          queueCapacity: 200
          keepAliveTime: 60
          unit: seconds

3. 使用线程池

在 Spring Boot 项目中,你可以通过 @Autowired 注解注入线程池并使用:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.concurrent.ExecutorService;

@Service
public class MyService {

    @Autowired
    private ExecutorService dtpExecutor1;

    public void doTask() {
        dtpExecutor1.execute(() -> {
            // 执行具体的任务逻辑
            System.out.println("Task is running in dtpExecutor1");
        });
    }
}

4. 监控与告警配置(可选)

4.1 配置监控

DynamicTp 支持使用 Micrometer 进行监控,你可以添加以下依赖:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

然后在配置文件中开启监控:

management:
  endpoints:
    web:
      exposure:
        include: '*'
  metrics:
    export:
      prometheus:
        enabled: true

4.2 配置告警

如果你想开启告警功能,例如使用企业微信告警,需要添加相关配置:

spring:
  dynamic:
    tp:
      notify:
        enabled: true
        platforms:
          - platform: wechat
            urlKey: your-url-key
            receivers: user1,user2
        executors:
          - threadPoolName: dtpExecutor1
            notifyItems:
              - type: capacity
                enabled: true
              - type: rejection
                enabled: true

这里配置了使用企业微信进行告警,当线程池容量达到阈值或发生拒绝任务时会发送告警信息。

5. 动态调整线程池配置

在使用配置中心的情况下,你可以直接在配置中心修改线程池的配置,如修改核心线程数、最大线程数等,DynamicTp 会自动更新线程池的配置,无需重启应用。

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/article/4228

相关文章

  • 动态线程池框架DynamicTp使用以及架构设计
  • CompletableFuture使用详解
  • 别再背线程池的七大参数了,现在面试官都这么问
  • 以面试官视角万字解读线程池10大经典面试题
  • TransmittableThreadLocal介绍与使用
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: DynamicTp 多线程 线程池
最后更新:2025年3月6日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >

文章评论

1 2 3 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55 57 58 60 61 62 63 64 65 66 67 69 72 74 76 77 78 79 80 81 82 85 86 87 90 92 93 94 95 96 97 98 99
取消回复

我见青山多妩媚,料青山见我应如是。

历史上的今天(12月13日)

  • 2009年:美国诺贝尔经济学奖第一人萨缪尔森逝世
  • 2001年:美国宣布退出《反导条约》
  • 1974年:马耳他宣布成为共和国
  • 1971年:美、法总统发表联合公报宣布美元贬值
  • 1553年:法国国王亨利四世出生
  • 更多历史事件
最新 热点 随机
最新 热点 随机
Java进阶实战:10个高效技巧+环境管理指南,让代码简洁又优雅 Gemini 3 Pro 深度测评:多模态AI编程的跨代际突破,从一句话到完整应用的全链路革命 6款核心MCP协议工具让AI深度融入业务,告别“纸上谈兵” Python 3.12并发革命:大厂争相升级的底层逻辑与实战指南 TIOBE 12月榜单:C#有望摘得年度语言,R语言重返Top 10 WordPress实现用户评论等级排行榜插件
玩博客的人是不是越来越少了?准备入手个亚太的ECS,友友们有什么建议吗?使用WireGuard在Ubuntu 24.04系统搭建VPNWordPress实现用户评论等级排行榜插件Gemini 3 Pro 深度测评:多模态AI编程的跨代际突破,从一句话到完整应用的全链路革命双 Token 机制
蓝奏云地址怎么天天失效…… SpringBoot使用RestTemplate进行接口调用 揭秘大模型Token的诞生:从字节到子词的分词逻辑与底层算法 多层嵌套map对象转扁平化map 网站使用HarmonyOSHans字体 打造AI应用的高颜值答案展示:基于Vue3.5+MarkdownIt构建专业级富文本渲染组件
标签聚合
数据库 JAVA IDEA 架构 AIGC 多线程 docker JVM AI编程 MySQL Spring ElasticSearch 分布式 SpringBoot 设计模式 AI Redis SQL K8s 日常
友情链接
  • 临窗旋墨
  • 哥斯拉
  • 彬红茶日记
  • 志文工作室
  • 搬砖日记
  • 旧时繁华
  • 林羽凡
  • 瓦匠个人小站
  • 皮皮社
  • 知向前端
  • 蜗牛工作室
  • 韩小韩博客
  • 风渡言

COPYRIGHT © 2025 lifengdi.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Dylan

津ICP备2024022503号-3