通过 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,Spring Boot 会使用它,并在必要时默认使用 VM MBeanServer。 如果这些都失败了,则会创建一个新的 MBeanServer

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

有关更多详细信息,请参见 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 中执行此操作的示例:

  • Properties

  • YAML

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 属性设置为 *,如下例所示:

  • Properties

  • YAML

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