java为同一服务器上的多个应用程序提供相同的JMX Mbean类
我有5个以上的SpringWeb应用程序,它们都在使用另一个公共库。这个公共库有自己的MBean。由于强制的唯一objectName约束,我的应用程序无法部署在同一服务器上
我使用MBean的方式如下:
@ManagedResource(objectName = "com.org.city:name=City", description = "City related operations")
我希望对所有应用程序使用具有不同对象名的相同MBean类。在不复制MBean的情况下使用它的正确方法是什么
谢谢
# 1 楼答案
可以使用占位符基于属性定义简单的命名策略
每一场战争都会有它;这是自己的应用程序副本。属性
例如
带有一个属性文件:app。属性
还有一个房产持有者
定义对象名
你的豆子将被命名为
您可以使用多个属性占位符
适用于Spring 4.0.2
# 2 楼答案
我遇到了同一个问题,并以Cemo's solution为基础。下面是一个示例实现
背景。xml
多应用元数据命名策略。java
这允许设置mbean,如:
它将用对象名
com.foo:name=myBean,type=MyBean,app=CustomAppName
注册一个mbean# 3 楼答案
我已经为定制行为实现了ObjectNamingStrategy
# 4 楼答案
您需要更改mbean导出程序的registering behavoiur:
但这仍然意味着只有一个应用程序注册bean。从逻辑上讲,您不能从多个应用程序中拥有多个同名的mbean。如何确定要调用哪个应用程序?将应用程序名称用作mbean名称的前缀
# 5 楼答案
这些答案帮助我找到了正确的方向,但基于注释的设置缺少了一些内容(但我不使用Spring Boot)
该Spring Docs on this subject说:
但是使用
@EnableMBeanExport
会妨碍您定义自己的NamingStrategy
因此,不要只设置一个
@Bean
方法,该方法使用使用上下文路径的自定义命名策略返回我的MBeanExporter