通过 JMX 进行监控和管理

Java 管理扩展 (JMX) 提供了一种标准机制来监视和管理应用程序。默认情况下,此功能未启用。您可以通过将spring.jmx.enabled配置属性设置为true来打开它。Spring Boot 将最合适的MBeanServer作为 bean 公开,其 ID 为mbeanServer。任何使用 Spring JMX 注解(@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中执行此操作的示例

  • 属性

  • 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: "*"