您可以使用JMX命名策略来执行此操作。在工作中,我们使用一个接口:
public interface RuntimeJmxNames { public String getJmxName(); public String[] getJmxPath();}我已经发布了实现RuntimemetadataNamingStrategy命名策略的代码。
然后像下面的Spring bean:
<bean id="jmxAttributeSource" /><bean id="jmxAssembler" > <property name="attributeSource" ref="jmxAttributeSource" /></bean><bean id="jmxNamingStrategy" > <property name="attributeSource" ref="jmxAttributeSource" /></bean><bean id="mbeanExporter" > <property name="autodetect" value="true" /> <property name="assembler" ref="jmxAssembler" /> <property name="namingStrategy" ref="jmxNamingStrategy" /> <property name="ensureUniqueRuntimeObjectNames" value="false" /> <property name="excludedBeans" ref="excludedJmxBeans" /></bean>
在代码中,您可以执行以下操作:
@ManagedResource(objectName = "foo.com:name=replaced", description = "...")public class Foo implements RuntimeJmxNames { ... public String getJmxName() { // here's where you can make the name be dynamic return toString(); } @Override public String[] getJmxPath() { return new String[] { "folder" }; }}这是有关JMX命名的Spring文档,尽管我不是100%确信它涵盖了自定义命名内容。
另外,我的SimpleJMX包也可以做到这一点。它使用JmxSelfNaming接口,该接口允许对象的每个实例定义其自己的bean名称以使其具有唯一性,并与Spring兼容。



