编辑
2025-08-03
实用工具
00

目录

简介
特点
场景
使用
spring-cloud-alibaba
依赖
nacos创建配置yml
bootstrap.yml 配置
使用线程池

简介

DynamicTp 是一个基于 配置中心(如Nacos、Apollo、Zookeeper等)的 动态线程池 管理框架,旨在优化Java应用中的线程池使用,解决传统线程池配置僵化、难以动态调整的问题。它能够在不重启应用的情况下,实时调整线程池参数(如核心线程数、最大线程数、队列容量等),并提供了丰富的监控和告警功能。 官网

特点

  • 动态调参 在运行时动态调整线程池参数,包括核心线程数、最大线程数、空闲线程超时时间、任务队列大小等

  • 通知报警 目前支持调参通知、活性、队列容量、拒绝策略、超时共六类通知报警维度,在运行时实时+定时检测,触发阈值进行推送

  • 运行监控 定时采集线程池运行指标数据,提供 jsonlog、micrometer、endpoint、jmx 四种指标数据采集方式,可灵活选择

  • 三方包集成 集成三方中间件线程池管理,已接入dubbo、rocketmq、hystrix、grpc、tomcat、undertow、jetty、grpc、okhttp等组件线程池管理

场景

  • 突发流量应对:高峰期自动扩容线程池,低谷期缩容以节省资源。

  • 避免任务堆积:动态调整队列容量或拒绝策略,防止OOM。

  • 统一管理:集中监控多个微服务的线程池状态。

使用

spring-cloud-alibaba

nacos为注册中心

依赖

xml
SpringBoot1x、2x 用此依赖 <dependency> <groupId>org.dromara.dynamictp</groupId> <artifactId>dynamic-tp-spring-cloud-starter-nacos</artifactId> <version>1.2.2</version> </dependency> SpringBoot3x 用此依赖 <dependency> <groupId>org.dromara.dynamictp</groupId> <artifactId>dynamic-tp-spring-cloud-starter-nacos</artifactId> <version>1.2.2-x</version> </dependency> 线程池配置文件

nacos创建配置yml

yml
dynamictp: enabled: true # 是否启用 dynamictp,默认true enabledCollect: true # 是否开启监控指标采集,默认true collectorTypes: micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging | JMX),默认micrometer logPath: /home/logs/dynamictp/user-center/ # 监控日志数据路径,默认 ${user.home}/logs,采集类型非logging不用配置 monitorInterval: 5 # 监控时间间隔(报警检测、指标采集),默认5s # 告警渠道 platforms: # 通知报警平台配置 - platform: wechat platformId: 1 # 平台id,自定义 urlKey: 3a700-127-4bd-a798-c53d8b69c # webhook 中的 key receivers: test1,test2 # 接受人企微账号 - platform: ding platformId: 2 # 平台id,自定义 urlKey: f80dad441fcd655438f4a08dcd6a # webhook 中的 access_token secret: SECb5441fa6f375d5b9d21 # 安全设置在验签模式下才的秘钥,非验签模式没有此值 receivers: 18888888888 # 钉钉账号手机号 - platform: lark platformId: 3 urlKey: 0d944ae7-b24a-40 # webhook 中的 token secret: 3a750012874bdac5c3d8b69c # 安全设置在签名校验模式下才的秘钥,非验签模式没有此值 receivers: test1,test2 # 接受人username / openid - platform: email platformId: 4 receivers: 123456@qq.com,789789@qq.com # 收件人邮箱,多个用逗号隔开 # 全局配置 globalExecutorProps: # 线程池配置 > 全局配置 > 字段默认值 rejectedHandlerType: CallerRunsPolicy queueType: VariableLinkedBlockingQueue waitForTasksToCompleteOnShutdown: true awaitTerminationSeconds: 3 taskWrapperNames: ["swTrace", "ttl", "mdc"] queueTimeout: 300 runTimeout: 300 notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警) - type: change # 线程池核心参数变更通知 silencePeriod: 120 # 通知静默时间(单位:s),默认值1,0表示不静默 - type: capacity # 队列容量使用率,报警项类型,查看源码 NotifyTypeEnum枚举类 threshold: 80 # 报警阈值,意思是队列使用率达到70%告警;默认值=70 count: 2 # 在一个统计周期内,如果触发阈值的数量达到 count,则触发报警;默认值=1 period: 30 # 报警统计周期(单位:s),默认值=120 silencePeriod: 0 # 报警静默时间(单位:s),0表示不静默,默认值=120 - type: liveness # 线程池活性 threshold: 80 # 报警阈值,意思是活性达到70%告警;默认值=70 count: 3 # 在一个统计周期内,如果触发阈值的数量达到 count,则触发报警;默认值=1 period: 30 # 报警统计周期(单位:s),默认值=120 silencePeriod: 0 # 报警静默时间(单位:s),0表示不静默;默认值=120 - type: reject # 触发任务拒绝告警 count: 1 # 在一个统计周期内,如果触发拒绝策略次数达到 count,则触发报警;默认值=1 period: 30 # 报警统计周期(单位:s),默认值=120 silencePeriod: 0 # 报警静默时间(单位:s),0表示不静默;默认值=120 - type: run_timeout # 任务执行超时告警 count: 20 # 在一个统计周期内,如果执行超时次数达到 count,则触发报警;默认值=10 period: 30 # 报警统计周期(单位:s),默认值=120 silencePeriod: 30 # 报警静默时间(单位:s),0表示不静默;默认值=120 - type: queue_timeout # 任务排队超时告警 count: 5 # 在一个统计周期内,如果排队超时次数达到 count,则触发报警;默认值=10 period: 30 # 报警统计周期(单位:s),默认值=120 silencePeriod: 0 # 报警静默时间(单位:s),0表示不静默;默认值=120 # 线程池配置 executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量 - threadPoolName: dtpExecutor1 # 线程池名称,必填 threadPoolAliasName: 测试线程池 # 线程池别名,可选 executorType: common # 线程池类型 common、eager、ordered、scheduled、priority,默认 common corePoolSize: 6 # 核心线程数,默认1 maximumPoolSize: 8 # 最大线程数,默认cpu核数 queueCapacity: 2000 # 队列容量,默认1024 queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类,默认VariableLinkedBlockingQueue rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类,默认AbortPolicy keepAliveTime: 60 # 空闲线程等待超时时间,默认60 threadNamePrefix: test # 线程名前缀,默认dtp allowCoreThreadTimeOut: false # 是否允许核心线程池超时,默认false waitForTasksToCompleteOnShutdown: true # 参考spring线程池设计,优雅关闭线程池,默认true awaitTerminationSeconds: 5 # 优雅关闭线程池时,阻塞等待线程池中任务执行时间,默认3,单位(s) preStartAllCoreThreads: false # 是否预热所有核心线程,默认false runTimeout: 200 # 任务执行超时阈值,单位(ms),默认0(不统计) queueTimeout: 100 # 任务在队列等待超时阈值,单位(ms),默认0(不统计) tryInterrupt: false # 执行超时后是否中断线程,默认false taskWrapperNames: ["ttl", "mdc"] # 任务包装器名称,继承TaskWrapper接口 notifyEnabled: true # 是否开启报警,默认true platformIds: [1,2] # 报警平台id,不配置默认拿上层platforms配置的所有平台

bootstrap.yml 配置

yml
spring: application: name: user-center profiles: active: dev cloud: nacos: discovery: server-addr: localhost:8848 config: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yml extension-configs: - dataId: ${spring.application.name}-dtp-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} group: DEFAULT_GROUP refresh: true # 必须配置,否则自动刷新不生效 refresh-enabled: true

使用线程池

java
@Resource private ThreadPoolExecutor dtpExecutor1; // 注入动态线程池 dtpExecutor1.execute(() -> System.out.println("DynamicTp任务执行"));

本文作者:Weee

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!