通过 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 会使用它,并在必要时默认使用 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: "*"