通过 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 会使用它;如有必要,Spring Boot 默认会使用 VM 的 MBeanServer。如果上述方式都失败了,则会创建一个新的 MBeanServer。
有关更多详细信息,请参见 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: "*"