【问题标题】:How to expose a property in MBean description如何在 MBean 描述中公开属性
【发布时间】:2016-01-14 08:43:09
【问题描述】:

项目中存在以下托管操作:

@ManagedOperation(description = "Some description")
@ManagedOperationParameters({
        @ManagedOperationParameter(name = "key", description = "Some description"),
})
public void foo(String key) {
    // some logic
}

还有一个属性可以在 Spring 上下文中使用,方法是用美元符号和方括号括起来:

"${some.property.key}"

是否可以在托管操作注释描述中使用上述属性键的值?比如:

@ManagedOperationParameter(name = "key", 
    description = "Some description, please note that the key is ${some.property.key}")

【问题讨论】:

    标签: java spring properties jmx spring-jmx


    【解决方案1】:

    不是开箱即用的,但很容易自定义...

    public class CustomAttributeSource extends AnnotationJmxAttributeSource implements EmbeddedValueResolverAware {
    
        private StringValueResolver embeddedValueResolver;
    
        @Override
        public void setEmbeddedValueResolver(StringValueResolver resolver) {
            this.embeddedValueResolver = resolver;
        }
    
        @Override
        public ManagedAttribute getManagedAttribute(Method method) throws InvalidMetadataException {
            ManagedAttribute managedAttribute = super.getManagedAttribute(method);
            if (this.embeddedValueResolver != null) {
                managedAttribute
                        .setDescription(this.embeddedValueResolver.resolveStringValue(managedAttribute.getDescription()));
            }
            return managedAttribute;
        }
    
        @Override
        public ManagedOperation getManagedOperation(Method method) throws InvalidMetadataException {
            ManagedOperation managedOperation = super.getManagedOperation(method);
            if (this.embeddedValueResolver != null) {
                managedOperation
                        .setDescription(this.embeddedValueResolver.resolveStringValue(managedOperation.getDescription()));
            }
            return managedOperation;
        }
    
    }
    

    那么……

    <bean class="org.springframework.jmx.export.annotation.AnnotationMBeanExporter">
        <property name="assembler">
            <bean class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
                <property name="attributeSource">
                    <bean class="foo.CustomAttributeSource" />
                </property>
            </bean>
        </property>
    </bean>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 2011-11-15
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多