我有一个Web应用程序,其中有40多个Mbean。我使用了Spring Framework。

我做得很好,而且运作良好。但是我有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中的属性都相同。
欢迎所有想法或意见。

谢谢

最佳答案

删除所有配置,并仅使用名称空间替换一次。另外,您的MBean是@Components,因此您只需扫描即可。只会让您留下xml的以下几行

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


或者,如果要保留当前配置而不是名称空间,请至少用以下内容替换它,然后删除所有其他bean。这样可以在应用程序上下文中自动检测MBean(这与<context:mbean-export />基本上相同。





有关更多信息,我强烈建议参考指南的JMX chapter

关于java - Mbean JMX Spring框架,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23383831/

10-10 22:35