通过 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 会使用它;必要时,会默认使用 JVM 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 中执行此操作的示例

  • 属性

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

  • 属性

  • YAML

management.endpoints.jmx.exposure.exclude=*
management:
  endpoints:
    jmx:
      exposure:
        exclude: "*"
© . This site is unofficial and not affiliated with VMware.