java - 如何在 MBean 描述中公开属性

标签 java spring properties jmx spring-jmx

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

@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}")

最佳答案

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

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>

关于java - 如何在 MBean 描述中公开属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34785000/

相关文章:

java - 如何查找一个点是否存在于哪个多边形中

java - 不使用集合类的二叉搜索树迭代器实现

spring - 将 spring boot war 部署到 tomcat 中

java - routeContext 中的 PropertyPlaceholderConfigurer。无法从属性文件设置 uri

C# 属性作为数组表示法

swift - 闭包存储属性初始化有什么好处?

java - Java 中的日历与公历

java - 使用 Spring JPA 规范按子查询排序

javax 验证不验证 notNull

java - 在 404 和 500 Http 错误 Spring MVC 上发送电子邮件或记录错误