DynamicTP-动态线程池管理工具本地部署-Springboot + Nacos + Prometheus + Grafana
一、官方地址 DynamicTP
二、踩坑
先要把依赖版本搞定,后面的配置才能顺利生效
1.一定要确定好自己是什么项目,SpringBoot或SpringCloud
不同类型的项目使用的DynamicTP的配置不相同
如果pom.xml文件中带有<artifactId>spring-cloud-dependencies</artifactId>
则是SpringCloud项目
2.依赖版本
首先SpringBoot版本要和Nacos版本可以兼容,可以先单独部署一个Nacos的配置中心应用,然后再添加DynamicDP的配置
我使用的依赖版本为 SpringBoot 2.1.1.RELEASE
+ Nacos 0.2.10
+ DynamicTP 1.2.0
官方提示
可以参考我的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dong</groupId>
<artifactId>myspringboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>myspringboot</name>
<description>Demo project for Spring Boot</description>
<properties>
<nacos-config-spring-boot.version>0.2.10</nacos-config-spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>${nacos-config-spring-boot.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-actuator</artifactId>
<version>${nacos-config-spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-spring-boot-starter-nacos</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.1.RELEASE</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<configuration>
<mainClass>com.dong.myspringboot.MyspringbootApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
3.DynamicTP配置
先贴上我的application.yml
server:
port: 9089
spring:
application:
name: my-service
profiles:
active: public
nacos:
config:
server-addr: 127.0.0.1:8848
type: yaml
data-ids: my-service-dev,my-dtp-service # 逗号分隔,第一个是项目主配置,第二个是动态线程池配置
auto-refresh: true
group: DEFAULT_GROUP
bootstrap:
enable: true
log-enable: true
data-ids要和Nacos配置中一模一样,比如我的DP配置是my-dtp-service,那么我的Nacos中也是一样的
四、报错 java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/json/JsonMapper
这是因为依赖冲突了
mvn dependency:tree | findstr "jackson"
命令执行后如果有输出则是有冲突
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
在pom文件中添加以上代码来剔除冲突依赖
五.
如果项目启动后控制台输出
DtpRegistry has been initialized, remote executors: [], local executors: []
那么大概率是Nacos中的配置没有读到,需要再确认依赖版本或者application.yml中的配置
六、Prometheus + Grafana实现图形化监控
官网地址:prometheus+grafana 接入流程
1. Prometheus + Grafana安装
下载链接:[Prometheus]、[Grafana]
如果跟我一样是windows系统,可以下载zip格式的包,解压后就能直接使用了
我使用的Prometheus版本是3.2.0
,Grafana版本是11.2.0
启动Prometheus后,在浏览器中输入127.0.0.1:9090可以进入图形化界面,配置完成后会显示一个Endpoint
2. 项目中配置Prometheus
2.1 引入依赖
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.1.2</version>
</dependency>
!!!!依赖版本是个坑
如果SpringBoot版本不高的话,建议选择低版本的Prometheus依赖,依赖不匹配的话所需的接口暴露不出来,会无法监听线程池的使用情况
2.2 pom.xml文件中添加指标暴露配置
management:
metrics:
export:
prometheus:
enabled: true
endpoints:
web:
exposure:
include: '*'
2.3 修改Prometheus配置
修改prometheus.yml
添加或覆盖以下代码
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ["localhost:9089"] #此处的ip和端口为要监听的SpringBoot项目的ip和端口
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~