特定模块的 JMX spring 配置

Posted

技术标签:

【中文标题】特定模块的 JMX spring 配置【英文标题】:JMX spring configuration for specific module 【发布时间】:2020-07-30 22:45:39 【问题描述】:

目前,我们有一个单体应用程序,其中所有 mbean 都在一个地方定义。 将来它们将被迁移并放置在专用模块中,每个模块都将具有其弹簧上下文定义。

发现 @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) 对于从原始解决方案迁移到新方法很有用。我的春季版本是 5.2.4

我希望控制 mbean 导出,但从 javadoc (AnnotationMBeanExporter) 中注意到,默认情况下使用此注释从 spring 上下文中导出所有 mbean。这意味着来自模块 A 的 jmx 配置将发布来自其他模块 B 或 C 的 mbean,甚至来自 3rd 方库的 mbean 也将可用。

我计划仅在希望公开 mbean 的特定模块上设置 JMX 配置,但不确定是否:

必须改变方法并将@EnableMBeanExport 放置一次,在主配置中的某处

必须创建一个新注释,这会改变默认流程

在注解中添加某项以在特定模块上激活它

【问题讨论】:

【参考方案1】:

请参阅 @EnableMBeanExport 的 javadocs。

 * <p>The resulting @link org.springframework.jmx.export.MBeanExporter MBeanExporter
 * bean is defined under the name "mbeanExporter". Alternatively, consider defining a
 * custom @link AnnotationMBeanExporter bean explicitly.
 *

所以只需将AnnotationMBeanExporter 声明为@Bean 并将其配置为仅注册您需要的bean。

见Controlling the Registration Behavior。

【讨论】:

谢谢您的解释!它比我想象的要容易,只需几行代码,并且还发现了 NamingStrategy,它将成为定义 MBean 名称的单一位置。

以上是关于特定模块的 JMX spring 配置的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot 重新打包启用 JMX

Spring基本框架

Spring Boot Actuator JMX 端点的漂亮打印输出

Spring boot Actuator vs prometheus Jmx exporter

Spring项目中使用JMX监控EhCache缓存

Spring项目中使用JMX监控EhCache缓存