跳到主要内容
版本:3.5.10

通过 JMX 进行监控和管理

QWen Max 中英对照 Monitoring and Management over JMX

Java Management Extensions (JMX) 提供了一种标准机制来监控和管理应用程序。默认情况下,此功能未启用。你可以通过将 spring.jmx.enabled 配置属性设置为 true 来开启它。Spring Boot 会将最合适的 MBeanServer 作为 ID 为 mbeanServer 的 bean 暴露出来。任何使用 Spring JMX 注解(@org.springframework.jmx.export.annotation.ManagedResource@ManagedAttribute@ManagedOperation)标注的 bean 都会被暴露到该 MBeanServer 中。

如果你的平台提供了标准的 MBeanServer,Spring Boot 会使用它;如有必要,Spring Boot 默认会使用 VM 的 MBeanServer。如果上述方式都失败了,则会创建一个新的 MBeanServer

备注

spring.jmx.enabled 仅影响 Spring 提供的管理 Bean。启用其他库(例如 Log4j2Quartz)提供的管理 Bean 是独立的。

有关更多详细信息,请参见 JmxAutoConfiguration 类。

默认情况下,Spring Boot 还会将管理端点以 JMX MBean 的形式暴露在 org.springframework.boot 域下。若要完全控制端点在 JMX 域中的注册,可以考虑注册你自己的 EndpointObjectNameFactory 实现。

自定义 MBean 名称

MBean 的名称通常由端点的 id 生成。例如,health 端点会暴露为 org.springframework.boot:type=Endpoint,name=Health

如果你的应用程序包含多个 Spring ApplicationContext,可能会发现名称冲突。为了解决这个问题,你可以将 spring.jmx.unique-names 属性设置为 true,以确保 MBean 名称始终唯一。

你还可以自定义端点暴露所使用的 JMX 域。以下设置展示了在 application.properties 中进行此操作的一个示例:

spring.jmx.unique-names=true
management.endpoints.jmx.domain=com.example.myapp

禁用 JMX 端点

如果你不想通过 JMX 暴露端点,可以将 management.endpoints.jmx.exposure.exclude 属性设置为 *,如下例所示:

management.endpoints.jmx.exposure.exclude=*