跳到主要内容

通过 JMX 进行监控和管理

DeepSeek V3 中英对照 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 会使用它,并在必要时默认使用 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
properties

禁用 JMX 端点

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

management.endpoints.jmx.exposure.exclude=*
properties