Spring Boot Admin 4.0.0 发布,正式支持 Spring Boot 4

Spring Boot Admin 4.0.0 今天正式发布了。

去年 11 月 Spring Boot 4.0.0 发布后,大家都在等生态跟上。经过两个里程碑版本的迭代,Spring Boot 生态中最热门的监控工具终于完成了大版本升级。

Spring Boot Admin 是什么

先给不太熟悉的同学补个课。

Spring Boot Admin(下文简称 SBA)是开源的 Spring Boot 应用监控管理工具,GitHub 上有 12.8k Star。架构很简单:一个 Admin Server 加上若干 Admin Client。

Client 注册到 Server,Server 通过 Actuator 端点抓取各个应用的健康状况、JVM 指标、日志输出、环境配置、线程信息等数据,然后在一套 Web UI 上集中展示。

它干的事不复杂,但解决的问题很实际——你不用挨个登录每台服务器查应用状态了。在微服务架构下,手动巡检几十个服务实例这种事,想想就头大。

底层地基全换了

SBA 4.0.0 的底层框架全部升了一个大版本。直接看对比:

维度 SBA 3.x SBA 4.0.0
核心框架 Spring Framework 6 Spring Framework 7
EE 标准 Jakarta EE 10 Jakarta EE 11(Servlet 6.1)
Java 基准 Java 17 Java 17(推荐 Java 25)
Kotlin 1.9+ 2.2+
GraalVM 23+ 25+

这里面最值得说的是 Java 25 的支持。Java 25 是最新的 LTS 版本,虚拟线程对监控场景帮助很大。

一个典型场景:Admin Server 同时监控 200 个微服务实例,每个实例每隔 10 秒做一次健康检查和指标抓取。传统的平台线程模型下,这意味着大量线程被 I/O 阻塞占用。虚拟线程把这类等待操作的成本降到接近于零,同样的硬件能扛住更大的监控规模。

Java 17 仍然是最低要求。升不升 25 看你自己,但推荐升。

UI 层大翻新

PrimeUI 主题

SBA 4.0.0 引入 @primeuix/themes 作为新的主题方案,视觉上更统一了。几个明显的改进:

折叠面板做得更紧凑了,实例详情页一屏能看到更多信息。Wallboard 也重新设计过,大屏监控场景下色彩对比和布局更合理。还有一个小修复:线程转储表格在复杂多线程场景下的列宽溢出问题,终于解决了。这个 bug 之前确实烦人。

SBOM 可视化

SBOM(软件物料清单)这块也有改进:路径配置变成可选的了,没有数据时会弹出告警,图表加了图例说明。安全审计的人可以直接在 Admin 面板上看各微服务用了哪些依赖、有没有风险。

通信协议换血:RestClient 上位

这是 4.0.0 最大的架构变化,值得展开说。

客户端:告别 RestTemplate

SBA 客户端以前用 RestTemplate 或 WebClient 跟 Server 通信。现在只提供 RestClient 的自动配置。

RestClient 是 Spring Framework 6.1 引入的同步 HTTP 客户端,Spring Framework 7 又做了一轮打磨。它的定位很清楚:同步模型 + 流式 API

说白了,它把 RestTemplate 的”好用”(同步、直觉)和 WebClient 的”好看”(链式调用、流式构建)结合到了一起。最关键的是,你不需要为了注册到 Admin Server 而引入整个 Project Reactor 的响应式依赖栈。

对于跑在 Servlet 容器上的传统 Spring Boot 应用来说,这就是最合适的 HTTP 客户端。

Maven 依赖本身没变:

1
2
3
4
5
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>4.0.0</version>
</dependency>

底层的自动配置已经默默切换。如果你之前自定义了 RestTemplate 相关的 SBA 配置,升级时需要改成 RestClient 的方式。

空安全注解换了

如果你读过我之前写的那篇 JSpecify 文章,对这个变化应该不陌生。

SBA 4.0.0 跟着 Spring Framework 7,把所有空安全注解从 Spring 自家的换成了 JSpecify 标准:

1
2
3
4
5
// 以前(SBA 3.x)
import org.springframework.lang.Nullable;

// 现在(SBA 4.0.0)
import org.jspecify.annotations.Nullable;

一行 import 的变化。但这意味着 Spring 生态在空安全注解上终于跟 Java 社区对齐了,JSpecify 算是从 Spring 的”方言”变成了”普通话”。配合 NullAway 这类编译期检查工具,能在代码写完的那一刻就揪出潜在的空指针问题,不用等到生产环境半夜三点报警。

如果你有自定义的 SBA 扩展代码用到了 @Nullable,改一下 import 就行。IDE 全局替换,一分钟的事。

Jackson 3 适配

Jackson 从版本 2 升到了版本 3,包名从 com.fasterxml.jackson 变成了 tools.jackson。SBA 前后端的序列化都跟着改了。如果你有自定义的序列化逻辑,检查一下 import 路径。

踩坑预警:Jolokia 掉链子了

这个问题需要单独拎出来说。

Jolokia 目前不支持 Spring Boot 4。 SBA 团队只能把 Jolokia 降级到 2.1.0,这个版本只能提供基础功能。官方正在等 Jolokia 2.5.0 发布来解决兼容性问题。

如果你的监控流程重度依赖 Jolokia(比如通过 JMX over HTTP 远程调用 MBean 操作),升级前务必评估影响。只看基本指标的话,问题不大。

写在最后

SBA 4.0.0 本质上是一次”对齐升级”——Spring Boot 4 在前面跑了三个月,SBA 在后面追了上来。追赶的质量不错。客户端换了 RestClient 变得更轻量,空安全注解终于有了统一标准,UI 上修的也都是实际问题。

唯一的遗憾是 Jolokia 的兼容性拖了后腿。但这锅不在 SBA,只能等 Jolokia 自己赶工。

最后提一句:升级可以积极,但别急着跳。先把 3.5.x 吃稳了再往 4.0.0 挪。毕竟隔壁 Undertow 就是前车之鉴——跟不上节奏的结局,我们都看到了。