1. 概述

监控 Java 应用的性能和稳定性是开发中的常规操作。Spring Boot 通过执行器提供了这种能力,但有时我们需要更细粒度的控制或更轻量级的实现方案。

Jolokia 通过 HTTP 接口暴露 JMX 操作,同时支持批量操作和安全机制,完美满足这类需求。

本文将演示如何在 Spring Boot 中集成 Jolokia。

2. 环境搭建

2.1. 依赖配置

首先添加 Jolokia 依赖,它会自动引入所需的服务库:

<dependency>
    <groupId>org.jolokia</groupId>
    <artifactId>jolokia-support-spring</artifactId>
    <version>2.2.1</version>
</dependency>

2.2. 启用 Jolokia

Spring Boot 默认只暴露少量执行器接口,需在配置文件中显式启用 Jolokia

management.endpoints.web.exposure.include=jolokia

完成以上配置后,启动应用即可访问 Jolokia 功能。

3. Jolokia 接口使用

Jolokia 提供多种操作命令:

核心命令列表

  • read:读取 MBean 属性
  • write:设置 MBean 属性
  • exec:执行 MBean 操作
  • list:列出所有 MBean 及其属性/操作
  • search:搜索 MBean
  • version:获取版本和服务器信息
  • notification:订阅通知

3.1. 版本查询

访问以下接口:

http://localhost:8080/actuator/jolokia/version

响应示例: Jolokia 版本信息

返回数据包含安全状态、代理配置等版本信息。

3.2. MBean 列表

执行 list 命令获取所有可用 MBean

http://localhost:8080/actuator/jolokia/list

响应示例: Jolokia MBean 列表

展示所有 MBean 及其允许的操作。

3.3. 属性读取

使用 read 命令获取堆内存使用情况

http://localhost:8080/actuator/jolokia/read/java.lang:type=Memory/HeapMemoryUsage

响应示例: Jolokia 属性读取

清晰展示堆内存各指标值。

3.4. 操作执行

通过 exec 命令触发垃圾回收

http://localhost:8080/actuator/jolokia/exec/java.lang:type=Memory/gc

响应示例: Jolokia 操作执行

返回 200 状态码表示操作成功。

⚠️ 注意:虽然操作简单,但必须严格控制权限,避免敏感操作被滥用。

4. 安全加固

Jolokia 默认暴露所有 JMX 资源,存在安全风险。需通过以下方式加固:

4.1. 禁用接口

生产环境可彻底禁用 Jolokia:

management.endpoint.jolokia.enabled=false

4.2. 访问控制

通过 jolokia-access.xml 配置安全规则(需放在 classpath 下)。

IP 限制

<restrict>
    <remote>
        <host>127.0.0.1</host>
    </remote>
</restrict>

非 127.0.0.1 访问将报错: Jolokia IP 错误

命令白名单

仅允许 readlist 命令:

<commands>
    <command>read</command>
    <command>list</command>
</commands>

尝试执行 exec 命令将被拒绝: Jolokia 禁止操作

MBean 级别控制

<allow>
  <mbean>
    <name>java.lang:type=Memory</name>
    <operation>gc</operation>
  </mbean>
</allow>

<deny>
  <mbean>
    <name>jdk.management.jfr:type=FlightRecorder</name>
    <attribute>*</attribute>
    <operation>*</operation>
  </mbean>
</deny>

✅ 允许 Memory MBean 的 gc 操作
❌ 禁止 FlightRecorder MBean 的所有操作

5. 总结

本文演示了 Spring Boot 集成 Jolokia 的完整流程:

  1. 通过依赖和配置快速启用 Jolokia
  2. 使用核心命令实现 JMX 操作的 HTTP 访问
  3. 采用 IP 限制、命令白名单和 MBean 级别控制的三层安全策略

这种方案特别适合需要轻量级 JMX 监控的场景,但务必做好安全防护,避免踩坑。


原始标题:Integrating Jolokia With Spring Boot | Baeldung