Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
191 commits
Select commit Hold shift + click to select a range
45153b5
升级系统依赖版本
umgsai Jun 6, 2026
25654b7
升级到springboot4+JDK21
umgsai Jun 7, 2026
1c7c2c2
config表的DAO层换成mybatis
umgsai Jun 7, 2026
eb7ad56
DAO层引入mybatis
umgsai Jun 7, 2026
1df6580
迁移到spring容器
umgsai Jun 7, 2026
2b1eb1e
重构日志记录方式
umgsai Jun 9, 2026
f6580f3
Migrate alarm SPI managers to Spring-backed lookup maps
umgsai Jun 9, 2026
0663ae6
Migrate alert decorators to Spring-backed registration
umgsai Jun 9, 2026
7d12ddd
Migrate alert contactors to Spring-backed registration
umgsai Jun 9, 2026
054a11e
Register alert summary executor with Spring
umgsai Jun 9, 2026
e8d02e9
Register problem model service with Spring
umgsai Jun 9, 2026
c3ec7e6
Register local problem model service with Spring
umgsai Jun 9, 2026
0252ea6
Register core local model services with Spring
umgsai Jun 9, 2026
683a66f
Register dependency local model services with Spring
umgsai Jun 9, 2026
ecb72aa
Register aggregate local model services with Spring
umgsai Jun 9, 2026
1aa1a37
Register business local model service with Spring
umgsai Jun 9, 2026
fa6b15a
Wire realtime consumer into Spring local model services
umgsai Jun 9, 2026
162d187
Merge Plexus local model fallbacks into Spring bridge
umgsai Jun 9, 2026
5250148
Register local logview service with Spring
umgsai Jun 10, 2026
99c90dc
Register report bucket manager with Spring
umgsai Jun 10, 2026
386047e
Bridge alarm manager through Spring
umgsai Jun 10, 2026
2846cd6
Bridge message handler consumer lookup through Spring
umgsai Jun 10, 2026
37b9d90
Resolve report model services from Spring
umgsai Jun 10, 2026
e51972b
Bridge permission filter dependencies through Spring
umgsai Jun 10, 2026
38832cd
Prefer Spring maps for report task registries
umgsai Jun 10, 2026
e4eca00
Prefer Spring lookups in CatHomeModule
umgsai Jun 10, 2026
7b5fb5e
Prefer Spring lookups in model page handler
umgsai Jun 10, 2026
39b53b2
Avoid Plexus release for Spring report buckets
umgsai Jun 10, 2026
2837b77
Register message finder manager with Spring
umgsai Jun 10, 2026
fae32c5
Register local bucket manager with Spring
umgsai Jun 10, 2026
2e9dff2
Register local message bucket manager with Spring
umgsai Jun 10, 2026
f290f78
Fix local logview lookup in composite service
umgsai Jun 10, 2026
2835bce
Introduce message analyzer factory
umgsai Jun 10, 2026
1e0b34a
Prepare realtime analysis chain for Spring wiring
umgsai Jun 10, 2026
f5048ea
逐步迁移任务构建链路到 Spring
umgsai Jun 10, 2026
120ea0e
迁移 dependency 和统计报表构建链路到 Spring
umgsai Jun 10, 2026
1192c3e
迁移 StateReportBuilder 到 Spring 并防止 current 任务重复注册
umgsai Jun 11, 2026
2f8dcaa
迁移多类报表 Builder 到 Spring 初始化路径
umgsai Jun 11, 2026
9fef9ec
迁移离线任务链到 Spring 并补强 MyBatis Repository 注入
umgsai Jun 11, 2026
e37edae
迁移部分 ReportReloader 到 Spring 管理
umgsai Jun 11, 2026
705eb4c
迁移剩余报表重载器到 Spring 管理
umgsai Jun 11, 2026
1956380
ReportReloader 正式脱离 Plexus fallback,改为 Spring-only 初始化
umgsai Jun 11, 2026
9f6cfa6
将报表重载与任务消费启动迁移到 Spring
umgsai Jun 11, 2026
4fccadd
将远端服务器刷新与部分离线任务迁移到 Spring
umgsai Jun 11, 2026
c677498
继续迁移报表任务 Builder 到 Spring
umgsai Jun 11, 2026
5241b60
移除 router/problem/storage/databaseCapacity TaskBuilder 的 Plexus 注册
umgsai Jun 12, 2026
230eb24
清理 7 个已由 Spring 管理的 report builder 中残留的 Plexus lifecycle/logging 依赖
umgsai Jun 12, 2026
60d32b8
把 ReportFacade.java 从 Plexus/Unidal lookup 体系里摘出来
umgsai Jun 12, 2026
0d40f95
移除 4 个配置/状态类的 Plexus lifecycle 和 Unidal 注解
umgsai Jun 12, 2026
38e35fe
移除权限配置管理器的 Plexus 生命周期依赖
umgsai Jun 12, 2026
8a6a1b7
继续移除Plexus/Unidal 依赖
umgsai Jun 12, 2026
7d20e19
继续移除Plexus/Unidal 依赖
umgsai Jun 12, 2026
5b0f9d3
继续移除Plexus/Unidal 依赖
umgsai Jun 12, 2026
5951979
迁移部分页面组件到 Spring 注入并补齐旧容器兼容
umgsai Jun 12, 2026
f7807fb
迁移核心报表页面组件到 Spring 注入并补齐旧 MVC 兼容
umgsai Jun 12, 2026
52edf46
迁移 heartbeat 报表页面到 Spring 注入并兼容旧 MVC
umgsai Jun 12, 2026
d54fb6e
迁移 top 报表页到 Spring 注入并补齐启动依赖
umgsai Jun 12, 2026
a9e799e
迁移 state 报表页到 Spring 注入并兼容旧 MVC
umgsai Jun 12, 2026
47d43c9
迁移 storage 报表页到 Spring 注入并兼容旧容器
umgsai Jun 12, 2026
7e27d3c
完成 cross 报表页这一批迁移
umgsai Jun 12, 2026
4f24a94
执行迁移matrix
umgsai Jun 12, 2026
688e712
迁移 business 页面注入并桥接数据源管理器
umgsai Jun 12, 2026
4cacc39
执行 overload 迁移
umgsai Jun 12, 2026
76862b5
迁移 logview 注入并补充消息查找诊断日志
umgsai Jun 12, 2026
700f8a3
完成 statistics 页面注入迁移
umgsai Jun 12, 2026
6978e90
迁移报表服务与任务组件的 Unidal 注解注册
umgsai Jun 12, 2026
5e15b5d
Migrate alert summary components to explicit Spring/Plexus wiring
umgsai Jun 13, 2026
1842401
显式化告警规则配置组件依赖
umgsai Jun 13, 2026
3374c12
显式化告警规则基础配置依赖
umgsai Jun 13, 2026
1202587
显式化业务告警分组服务依赖
umgsai Jun 13, 2026
9a56768
显式化异常告警构建器依赖
umgsai Jun 13, 2026
fc97713
显式化告警 SPI 集合管理器注册
umgsai Jun 13, 2026
8af04c0
显式化告警配置管理器和数据检查器注册
umgsai Jun 13, 2026
de10650
显式化告警 SPI 与告警任务依赖注册
umgsai Jun 13, 2026
27b5ff6
显式化报表任务、路由与登录服务组件注册
umgsai Jun 13, 2026
fcc0eee
显式化配置 Processor 与核心配置 Manager 注册
umgsai Jun 13, 2026
d62d338
显式化核心配置与基础组件注册
umgsai Jun 13, 2026
da5157d
显式化基础服务与报表组件注册
umgsai Jun 13, 2026
962172d
显式化 cat-core Repository 与存储组件注入
umgsai Jun 13, 2026
42be211
显式化实时分析链路组件依赖
umgsai Jun 13, 2026
b0e38ff
显式化 consumer 实时 Analyzer 注册
umgsai Jun 13, 2026
8d23b85
显式化 consumer ReportDelegate 注册
umgsai Jun 13, 2026
0234f8b
显式化 consumer 与 hadoop hdfs 组件注册
umgsai Jun 13, 2026
9b9c93d
完成 cat-hadoop storage.local 小组迁移
umgsai Jun 14, 2026
1d49571
完成 cat-hadoop storage.hdfs 小组迁移
umgsai Jun 14, 2026
cbb358c
迁移 cat-hadoop 的 storage.internals 组件
umgsai Jun 14, 2026
1e8ceaf
迁移 cat-hadoop 的 storage.internals
umgsai Jun 14, 2026
492cc3a
迁移一批Handler
umgsai Jun 14, 2026
33ce07e
完成 permission.Handler 和 router.Handler 迁移
umgsai Jun 14, 2026
a7fa6e8
显式化 system 页面 Handler 注册
umgsai Jun 14, 2026
63fb86d
删除了测试源码里剩余的 Unidal
umgsai Jun 14, 2026
d8ae8f1
清理低风险 Unidal 工具类依赖
umgsai Jun 14, 2026
f88f30c
清理生产代码中的低风险 Unidal 工具类依赖
umgsai Jun 14, 2026
c42f92e
完成 cat-core 剩余低风险工具类清理
umgsai Jun 14, 2026
5c2f63e
使用 Apache Commons 和 Guava 替换 cat-core Unidal 工具类
umgsai Jun 14, 2026
2225201
完成 cat-home 告警层一批 Unidal 工具类清理
umgsai Jun 14, 2026
8ae95d8
cat-home 页面/展示层中的 Unidal 工具类替换为 Commons Lang3
umgsai Jun 14, 2026
918018c
替换工具类
umgsai Jun 14, 2026
aec243a
替换工具类
umgsai Jun 14, 2026
e905c4b
替换工具类
umgsai Jun 14, 2026
a2bd057
替换unidal相关类
umgsai Jun 14, 2026
d86b63f
完成 cat-alarm 低风险 Pair 清理
umgsai Jun 14, 2026
f70f9ba
清理 cat-hadoop 主代码里的低风险 Unidal 工具依赖
umgsai Jun 14, 2026
c2cdc50
清理 cat-home/src/test/java 中最后一批低风险 Unidal 工具引用
umgsai Jun 14, 2026
c28421c
将服务端主代码的 Unidal Threads 迁移到 CAT 自有 Threads
umgsai Jun 14, 2026
9b0eeeb
清理unidal
umgsai Jun 14, 2026
060c3cc
替换Joiners
umgsai Jun 14, 2026
a5a033e
完成这一批 cat-hadoop Plexus logging 清理
umgsai Jun 14, 2026
ff2467e
规范日志记录
umgsai Jun 14, 2026
c34a333
规范日志记录
umgsai Jun 14, 2026
8d5e972
规范日志记录
umgsai Jun 14, 2026
562ff73
移除部分 Plexus 日志与生命周期依赖
umgsai Jun 14, 2026
a5a5af4
继续清理更多低风险 Plexus lifecycle 依赖点
umgsai Jun 14, 2026
f850f51
补齐 Logview 旧本地消息存储的 Spring 接线
umgsai Jun 14, 2026
d4c4ad0
清理核心组件的 Plexus 生命周期依赖
umgsai Jun 14, 2026
9e750f6
迁移实时分析器与消息 dump 链路到 Spring 装配
umgsai Jun 14, 2026
25231b2
迁移 hadoop 存储与启动链路到 Spring 装配
umgsai Jun 14, 2026
2faea65
完成 CatHadoopModule 清理
umgsai Jun 15, 2026
19e380e
完成 启动边界清理
umgsai Jun 15, 2026
3883415
Remove Plexus lifecycle and descriptor generation from cat-hadoop
umgsai Jun 15, 2026
60c6701
完成 cat-alarm 的 Plexus 生成链路移除
umgsai Jun 15, 2026
96b6252
完成 cat-consumer 主源码的 Plexus 生成链路移除
umgsai Jun 15, 2026
069765c
完成 cat-core 的 Plexus 生成链路移除
umgsai Jun 15, 2026
7f7aa82
将部分 MVC 页面 Handler 迁移为 Spring 管理
umgsai Jun 15, 2026
bb0161e
Remove remaining Plexus build and logger bridge
umgsai Jun 15, 2026
0e9f466
Register more MVC handlers as Spring beans
umgsai Jun 15, 2026
8d191a5
Register system business and permission MVC handlers
umgsai Jun 15, 2026
8e7bc5f
Register system config MVC handler and remove Plexus remnants
umgsai Jun 15, 2026
0167148
迁移系统页面依赖到 Spring 注入
umgsai Jun 15, 2026
225c845
移除 report 页面服务中的 CatSpringContext 回退逻辑
umgsai Jun 15, 2026
6771caa
移除 report 任务与告警摘要的 Spring 回退查找
umgsai Jun 15, 2026
65524f1
移除告警与消费链路中的 SpringContext 运行时查找
umgsai Jun 15, 2026
36ba94c
清理 cat-core 数据访问层的 SpringContext 静态查找
umgsai Jun 15, 2026
0121c99
移除 CatSpringContext 并清理低风险 Plexus 测试依赖
umgsai Jun 16, 2026
0940788
清理 cat-consumer 测试侧 Plexus lookup 依赖
umgsai Jun 16, 2026
fb55941
清理 hadoop 测试侧 Plexus 依赖
umgsai Jun 16, 2026
78f98ae
清理 cat-client 与 cat-home 测试基类依赖
umgsai Jun 16, 2026
d07c657
移除 MyBatis 仓储的 Unidal DataSourceManager 兜底路径
umgsai Jun 16, 2026
02691fc
迁移 DAL JDBC 类型并禁用生成 DAO
umgsai Jun 16, 2026
b798202
移除 DalException 兼容层
umgsai Jun 16, 2026
c7900c6
清理 Unidal 初始化与测试框架残留
umgsai Jun 16, 2026
e0494c5
增加 Spring MVC 并行迁移入口和首页原型
umgsai Jun 16, 2026
26f071d
扩展 Spring MVC 并行迁移页面
umgsai Jun 16, 2026
06bde37
暂停页面迁移前补充 Spring MVC 并行页面实验
umgsai Jun 16, 2026
94acc3f
MyBatis XML 重构
umgsai Jun 16, 2026
3dbf7fe
重构t_daily_report
umgsai Jun 16, 2026
2dc2f41
重构t_weekly_report表
umgsai Jun 16, 2026
cf299a6
重构t_monthly_report表
umgsai Jun 16, 2026
466ea06
重构t_host_info表
umgsai Jun 16, 2026
a3d368b
重构t_hourly_report表
umgsai Jun 16, 2026
4b79212
重构表
umgsai Jun 16, 2026
932b12e
重构t_business_report表
umgsai Jun 17, 2026
753e4d6
重构t_task表
umgsai Jun 17, 2026
82e1032
重构t_project表
umgsai Jun 17, 2026
3c8a682
重构t_topology_graph表
umgsai Jun 17, 2026
11f20b9
重构t_config表
umgsai Jun 17, 2026
a29e570
重构t_baseline表
umgsai Jun 17, 2026
9b32244
重构t_alteration表
umgsai Jun 17, 2026
71cadef
重构t_alert表
umgsai Jun 17, 2026
de03421
重构t_alert_summary表
umgsai Jun 17, 2026
215d91f
重构t_operation表
umgsai Jun 17, 2026
58de12a
重构t_overload表
umgsai Jun 17, 2026
f130ce6
重构t_config_modification表
umgsai Jun 17, 2026
8866c4b
重构t_user_define_rule表
umgsai Jun 17, 2026
04718cc
重构t_business_config表
umgsai Jun 17, 2026
b10a50d
重构t_metric_screen
umgsai Jun 17, 2026
97330fa
重构t_metric_graph
umgsai Jun 17, 2026
f6a92d7
重构t_server_alarm_rule
umgsai Jun 17, 2026
db20179
fix字段默认值问题
umgsai Jun 17, 2026
3b0d1b1
修复 Netty ByteBuf.release() 泄漏
umgsai Jun 17, 2026
525f688
fix拼写错误
umgsai Jun 17, 2026
9e31ab1
重构DAO层结构
umgsai Jun 18, 2026
25bbdf3
重构DAO层结构
umgsai Jun 18, 2026
c3efeae
重构DAO层结构
umgsai Jun 18, 2026
314dc0d
add log
umgsai Jun 18, 2026
6c7963c
fix transaction 页面最大值都是0的问题
umgsai Jun 19, 2026
315b1f3
fix transaction中max为0的问题;fix打点数据*2的问题
umgsai Jun 19, 2026
e160d5f
fix 重启数据丢失问题
umgsai Jun 19, 2026
5b9bf32
fix查询task为null时不合理的异常
umgsai Jun 19, 2026
c836548
迁移部分页面到springmvc
umgsai Jun 20, 2026
61d48ad
add install maven script
umgsai Jun 21, 2026
abc860c
add install maven script
umgsai Jun 21, 2026
f3765e4
迁移页面至SpringMVC
umgsai Jun 23, 2026
e7ae61f
新页面规范化
umgsai Jun 23, 2026
6f3eeab
重构problem页面
umgsai Jun 24, 2026
d93ef03
重构heartbeat页面
umgsai Jun 24, 2026
72e4061
重构state页面
umgsai Jun 24, 2026
77fa7fe
迁移管理端配置页面走SpringMVC
umgsai Jun 24, 2026
e2baf00
BusinessAnalyzer改为注解注入Bean
umgsai Jun 25, 2026
5df9f64
迁移配置页面到springmvc
umgsai Jun 25, 2026
956fe14
Merge branch 'dev_202606_update' of https://github.com/umgsai/cat int…
umgsai Jun 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/maven-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ jobs:

steps:
- uses: actions/checkout@v3
- name: Set up JDK 8
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '8'
java-version: '21'
distribution: 'temurin'
cache: 'maven'

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/maven-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ jobs:

steps:
- uses: actions/checkout@v3
- name: Set up JDK 8
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '8'
java-version: '21'
distribution: 'temurin'
cache: 'maven'
server-id: ossrh
Expand All @@ -43,4 +43,4 @@ jobs:
env:
MAVEN_USERNAME: ${{ secrets.MAVEN_USER }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_TOKEN }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
210 changes: 210 additions & 0 deletions JDK21_UPGRADE_PLAN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
# CAT JDK 21 升级计划

## 目标

将当前 CAT 工程升级到 JDK 21 构建和运行,替换高风险历史依赖,并逐步从“外置 Tomcat + WAR”部署方式迁移到“JDK 21 + 可执行 JAR + 内嵌容器”部署方式。

这次升级不只改版本号。项目仍依赖 `javax.servlet`、`web.xml`、Unidal MVC、Plexus 组件、JSP、历史 Log4j 1.x API 和 MySQL/Netty/Hadoop 等基础库。升级需要分阶段推进,每个阶段都要保持可编译、可测试、可打包、可启动。

## 当前推荐路线

推荐采用“两步容器迁移”:

1. 先把工程构建、运行时和主要基础依赖升级到 JDK 21 可用状态。
2. 新增 `cat-boot` 过渡模块,用 Spring Boot 4 稳定版作为启动外壳,但 Web 容器暂时锁定在 Tomcat 9 线,继续兼容现有 `javax.servlet` / JSP / Unidal MVC。
3. Docker 从外置 Tomcat 镜像切换为 JDK 21 runtime 镜像,通过 `java -jar /app/cat-boot.jar` 启动。
4. 后续单独评估 Jakarta 迁移,确认 Unidal MVC、JSP、Servlet Filter 和插件体系可行后,再考虑真正切换到 Spring Boot 4 原生 Jakarta Web 栈。

不建议第一步直接把现有 Web 层 Jakarta 化。Spring Boot 4 的 Web 生态基于 Jakarta Servlet,而当前项目大量代码和依赖仍是 `javax.servlet`,直接切换会把 JDK、容器、MVC、JSP、Filter、依赖树问题混在一起,风险过高。

## 已完成的升级项

### 1. JDK 21 构建基线

- 根 POM 已改为 `<maven.compiler.release>21</maven.compiler.release>`。
- Maven Enforcer 已要求 Java `[21,22)` 和 Maven `[3.9.0,)`。
- Maven 插件已升级到 JDK 21 兼容版本,包括 compiler、surefire、war、shade、source、javadoc、enforcer。
- GitHub Actions 已从 JDK 8 切换到 JDK 21。
- Docker 构建镜像已切换到 `maven:3.9.12-eclipse-temurin-21`。

### 2. 测试兼容性修复

- 修复 `DefaultMessageTree.copyForTest()` 对消息长度头的处理,并释放 `ByteBuf`。
- `PlainTextMessageCodec` 解码后补充完成态设置。
- 多个 consumer analyzer 测试补充 `setCompleted()`。
- `TaskHelperTest` 移除 PowerMock,用普通 JUnit/Mockito 风格验证。
- `StateAnalyzer` 增加测试所需的 `setMIp(String ip)`。

### 3. 日志组件迁移到 Logback

- Logback 已升级到 `1.5.34`。
- SLF4J 使用 `2.0.17` 稳定线。
- 服务端模块引入 `logback-classic` 和 `log4j-over-slf4j`。
- 排除 Hadoop 传递进来的旧 `slf4j-log4j12` 和 `log4j`。
- 新增 `cat-home/src/main/resources/logback.xml`。
- 测试模块新增 `logback-test.xml` 或测试用 `log4j.properties`,避免测试日志绑定冲突。
- 保留 `log4j:log4j` 的 optional/provided 兼容依赖,用于 CAT 客户端对外暴露的 Log4j 1.x Appender API;它不应作为服务端运行时日志实现。

### 4. JSON 组件迁移到 fastjson2

- `com.alibaba:fastjson` 已替换为 `com.alibaba.fastjson2:fastjson2`。
- fastjson2 已升级到 `2.0.62`。
- 当前源码未发现直接使用 `com.alibaba.fastjson.*` import,本阶段主要是依赖坐标迁移。

### 5. 低风险依赖升级

- JUnit 升级到 `4.13.2`。
- Netty 升级到 `4.1.128.Final`,不采用 Netty 5 alpha。
- Gson 升级到 `2.13.2`。
- HttpClient/HttpMime 升级到 `4.5.14`。
- Commons Codec 升级到 `1.19.0`。
- Snappy 升级到 `1.1.10.8`。
- Freemarker 升级到 `2.3.34`。
- c3p0 升级到 `0.11.2`。
- Plexus Utils 升级到 `4.0.2`。
- java-saml 升级到 `2.9.0`。
- MySQL 驱动坐标从 `mysql:mysql-connector-java` 切换为 `com.mysql:mysql-connector-j:9.7.0`。
- MySQL 驱动类配置更新为 `com.mysql.cj.jdbc.Driver`。

### 6. Spring Boot 过渡启动模块

- 新增 `cat-boot` 模块。
- `cat-boot` 引入 Spring Boot `4.0.2` 稳定版作为启动外壳。
- `cat-boot` 显式使用 `tomcat-embed-core` / `tomcat-embed-jasper` `9.0.112`,继续兼容现有 `javax.servlet` Web 层。
- `cat-boot` 打包时复制 `cat-home.war` 到 classpath,并通过 shade 生成可执行 JAR。
- `CatBootApplication` 启动 Spring Boot 后,由 `EmbeddedCatServer` 解出 `cat-home.war` 并部署到 `/cat`。
- shade 配置已排除 `META-INF/*.SF`、`META-INF/*.DSA`、`META-INF/*.RSA`,避免 JDK 21 下 fat jar 签名校验失败。

### 7. Docker 运行方式切换

- Docker runtime 镜像已从 Tomcat/JRE 8 切换为 `eclipse-temurin:21-jre`。
- Docker 运行入口已改为 `java -Dcat.home=/data/appdatas/cat -Dserver.port=8080 -jar /app/cat-boot.jar`。
- `docker-compose.yml` 已改为基于当前 Dockerfile 构建 `cat:4.0-RC1-jdk21`,不再默认拉取旧的 `meituaninc/cat:3.0.1` 镜像。

## 当前验证结果

已通过的验证:

- `mvn -pl cat-consumer -am test`
- `mvn -pl cat-alarm -am test`
- `mvn -pl cat-boot -am package -DskipTests`
- `mvn package -DskipTests`
- `mvn test`
- `java -Dserver.port=0 -jar cat-boot/target/cat-boot-4.0-RC1.jar` 短启动验证
- `java -Dcat.home=.tmp-cat-home -Dserver.port=18080 -jar cat-boot/target/cat-boot-4.0-RC1.jar` 短启动和 HTTP 探测

短启动中已确认:

- Spring Boot `4.0.2` 启动。
- Embedded Tomcat `9.0.112` 启动。
- CAT Web 应用部署到 `/cat`。
- Netty receiver 启动日志出现。
- 本地未配置 `datasources.xml` / `server.xml` 时会出现数据源缺失日志,这是运行环境配置问题,不是构建失败。
- 使用临时 `cat.home` 访问 `/cat/r` 可到达 Web 层,但返回 500;堆栈指向缺少数据源和 top service 注册,不是 Spring Boot/Tomcat 启动失败。
- 当前机器未安装或未暴露 `docker` 命令,Docker build/compose 端到端验证尚未执行。

## 待完成验证

### 1. 全量打包复验

在最终提交前继续执行:

```bash
mvn package -DskipTests
```

通过后确认:

- `cat-home/target/cat-home-4.0-RC1.war` 存在。
- `cat-boot/target/cat-boot-4.0-RC1.jar` 存在。

### 2. Docker 构建验证

需要在可用 Docker 环境中执行:

```bash
docker build -f docker/Dockerfile .
```

验收标准:

- Maven 构建阶段成功。
- runtime 镜像只依赖 JDK 21 runtime,不依赖外置 Tomcat。
- 镜像内存在 `/app/cat-boot.jar`。

### 3. Docker Compose 端到端验证

需要执行:

```bash
docker compose -f docker/docker-compose.yml up --build
```

验收标准:

- MySQL 容器启动并初始化 `cat` schema。
- CAT 容器启动成功。
- `8080` Web 端口可访问。
- `2280` TCP 接收端口可监听。
- `/cat/r`、`/cat/s` 等路由可访问。
- JSP 页面和静态资源可正常加载。
- Logback 日志正常输出。
- JSON 输出结构保持兼容。

### 4. 带真实配置的运行冒烟

需要提供或挂载真实配置:

- `client.xml`
- `server.xml`
- `datasources.xml`

验收标准:

- MySQL 数据源初始化成功。
- 服务端能写入和读取 CAT 配置。
- 客户端上报链路可打通。
- 报表页面可访问。
- 告警配置和通知链路无启动异常。

## 仍需单独评估的升级项

### 1. Jakarta / Spring Boot 原生 Web 栈迁移

当前 `cat-boot` 是过渡方案,不等于已经完成 Spring Boot 4 原生 Web 迁移。后续需要单独评估:

- `javax.servlet.*` 到 `jakarta.servlet.*` 的代码迁移。
- `web.xml` namespace 和 Servlet/JSP/JSTL 依赖迁移。
- Unidal MVC 是否支持 Jakarta。
- Plexus 组件初始化顺序是否受影响。
- JSP 在新容器中的渲染兼容性。
- Filter dispatch、权限过滤、Domain 过滤是否保持兼容。

### 2. Unidal 升级

Maven 版本检查显示 Unidal framework 有 4.x 线,但它影响 MVC、Plexus、DAL、代码生成和运行时组件,不应和当前 JDK/Spring Boot 过渡升级混在一起。建议后续单独开分支验证。

### 3. Hadoop 升级

Hadoop `2.4.1` 到 3.x 是高风险升级,会影响 HDFS/logview 相关行为和传递依赖。建议单独处理,并补充 HDFS 场景验证。

### 4. 历史兼容 API

CAT 客户端仍对外提供 Log4j 1.x Appender 等历史集成 API。服务端运行时可以迁移到 Logback,但客户端 API 是否彻底移除需要单独评估兼容性和用户影响。

## 提交拆分建议

建议按以下顺序拆分提交:

1. JDK 21 构建基线、Maven 插件、CI 配置。
2. JDK 21 下的测试修复。
3. Logback 迁移。
4. fastjson2 迁移。
5. 低风险依赖升级。
6. 新增 `cat-boot` 过渡启动模块。
7. Docker 从外置 Tomcat 切换为 `java -jar`。
8. 升级计划文档和验证记录。

## 当前结论

当前推荐方案已经进入可继续验证状态:JDK 21 构建、Logback、fastjson2、低风险依赖和 `cat-boot` 可执行 JAR 已完成初步升级。接下来重点不是继续扩大版本升级范围,而是完成 Docker/MySQL/JSP/路由/上报链路的端到端验证,并把 Jakarta 迁移作为后续独立阶段处理。
Loading