【问题标题】:Mbean JMX Spring FrameworkMbean JMX Spring 框架
【发布时间】:2014-04-30 08:58:13
【问题描述】:

我有一个超过 40 Mbean 的 Web 应用程序。我使用了 Spring 框架。

我做得很好,而且运作良好。但是我有 40 Mbean,所以想概括一下。

@Component
@ManagedResource(objectName="ProjectCache:name=XMBean", log=true, logFile="jmx.log")
public class XMBean extends AbstractCacheMBean<String, XCO, XCache> { 

@ManagedOperation(description ="ProjectCache XCO key")
    @Override
    public List<String> showAllKeys(){  
        return super.getKey();      
    }

@ManagedOperation(description ="ProjectCache XCO")
public List<String> showAllElements(){  
    return super.findAll();     
}

@Override
public XCache getCache() {
    return getFacadeCache().getXCache();
}

@ManagedOperation(description ="ProjectCache XCO by key)
@Override
public String ShowbyKey(String key) {
    return super.findbyKey(key);
}

}

现在我有相同的方式类 YMbean、AMBean 等。

我在应用程序 mbean.xml 中配置了 Spring。

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/jee 
    http://www.springframework.org/schema/jee/spring-jee.xsd">

    <!-- this bean must not be lazily initialized if the exporting is to happen -->
    <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
        <property name="server" ref="mbeanServer"/>
        <property name="assembler" ref="assembler" />
        <property name="namingStrategy" ref="namingStrategy" />         
    </bean>

    <bean id="jmxAttributeSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />

    <!-- will create management interface using annotation metadata -->
    <bean id="assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
        <property name="attributeSource" ref="jmxAttributeSource" />
    </bean>

    <!-- will pick up the ObjectName from the annotation -->
    <bean id="namingStrategy" class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
        <property name="attributeSource" ref="jmxAttributeSource" />
    </bean>

    <bean id="xMBean" 
        class="in.projet.business.mbean.XMBean"> 
        <property name="memoryCache" ref="repository" /> 
</bean>

同样,我将准备 YMbean 类并在 xml 中进行初始化。

我应该做什么不需要在 XML 中修改无论我创建的类或数量如何,都不需要更新 XML。

我要使用的所有 Mbean 的属性都是相同的。 欢迎所有想法或意见。

谢谢

【问题讨论】:

    标签: java spring spring-jmx


    【解决方案1】:

    删除所有配置并使用命名空间替换,并且只替换一次。此外,您的 MBean 是 @Components,因此您可以简单地扫描它们。这只会给你以下几行xml

    <context:component-scan base-package="in.projet.business.mbean" />
    <context:mbean-export/>
    

    或者,如果您想保留当前配置而不是命名空间,请至少将其替换为以下内容并删除所有其他 bean。这可以在您的应用程序上下文中自动检测 MBean(这与 &lt;context:mbean-export /&gt; 基本相同。

    我强烈建议参考指南的JMX chapter 获取更多信息。

    【讨论】:

    • @Deinum ,Bi 阅读了文档,这就是为什么能够做到这一点。但我的问题是我要初始化的财产和豆子。如果我声明没有财产的bean。它在方法中给出空值。那么,您是否知道如何为所有 bean 通用属性。您的建议,我正在努力。
    • @Deinum,我从 xml 中删除了所有内容,在 jmx 控制台中它显示了所有 bean,只是问题是我告诉你的属性。当我执行托管操作时,它给了我空指针异常。因为我还没有通过房产。
    • 那你的问题不清楚。假设您的repository 也是一个@Component,它应该被检测到(可能需要对&lt;context:component-scan .. /&gt; 标记中的基本包进行一些修改)并将@Autowired 放在类的存储库字段中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多