通过 JMX 进行监控和管理

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

如果您的平台提供标准的 MBeanServer,Spring Boot 将使用该标准,并在必要时默认使用 VM 的 MBeanServer。 如果以上方法均失败,则会创建一个新的 MBeanServerspring-doc.cadn.net.cn

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

有关更多详细信息,请参阅 JmxAutoConfiguration 类。spring-doc.cadn.net.cn

默认情况下,Spring Boot 还会在 org.springframework.boot 域下将管理端点暴露为 JMX MBean。 若要完全控制 JMX 域中的端点注册,请考虑注册您自己的 EndpointObjectNameFactory 实现。spring-doc.cadn.net.cn

自定义 MBean 名称

MBean 的名称通常由端点的 id 生成。 例如,health 端点会以 org.springframework.boot:type=Endpoint,name=Health 的形式暴露。spring-doc.cadn.net.cn

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

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

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

禁用 JMX 端点

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

management.endpoints.jmx.exposure.exclude=*
management:
  endpoints:
    jmx:
      exposure:
        exclude: "*"