JConsole(JMX)中仍添加了未注释的方法

时间:2014-04-07 08:15:24

标签: java spring jmx

我在JMX中管理类时遇到问题。我将它暴露给JMX,并通过添加注释来设置我的类的可管理方法和属性但是当我在JConsole中打开我的bean时,它暴露了所有方法并且它打印输出,如下面的屏幕截图所示:

enter image description here

我仍然可以使用我暴露的方法没有任何问题,但是总是有点烦人的错误的窗口弹出并且必须向下滚动才能找到我暴露的方法。

以下是我如何宣布我的bean:

   <bean name="MBeanExporter" class="org.springframework.jmx.export.MBeanExporter">
      <property name="beans">
         <map>
            <entry key="SmartTrade:name=tickEngine" value-ref="aggregationEngine" />
         </map>
      </property>
   </bean>

with aggregationEngine是对我的类的引用:

<bean name="aggregationEngine" class="com.smarttrade.tick.engine.TickEngine">
   <!--       list of properties .... -->
</bean>

这是我班级的一部分,你可以看到setTickDataReader(..)没有暴露但仍然出现在JConsole中,以及我如何为好的方法做出注释:

public void setTickDataReader(TickDataReader tickDataReader) {
    this.tickDataReader = tickDataReader;
}


public void setEnabled(boolean enabled) {
    this.enabled = enabled;
}

@ManagedOperation(description = "Activate or deactivate tick data")
@ManagedOperationParameters({ @ManagedOperationParameter(name = "enable", description = "boolean") })
public void enableTickData(boolean enable) {
    this.enabled = enable;
    if (enabled) {
        init();
    } else {
        unsubscribe();
    }
}

知道它可以来自哪里? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

org.springframework.jmx.export.MBeanExporter默认使用org.springframework.jmx.export.assembler.SimpleReflectiveMBeanInfoAssembler。这有效地将所有公共方法暴露给JMX。

要仅导出带注释的方法,请切换到使用org.springframework.jmx.export.annotation.AnnotationMBeanExporter或设置namingStrategyassembler属性,使其使用注释处理(基本上是org.springframework.jmx.export.annotation.AnnotationMBeanExporter也可以。)