0

我知道这已经被问过很多次了,但我无法解决我的问题。我已经设置了一个基本示例,将 POJO 公开为 JMX bean,并希望在 JConsole 中查看它。我正在关注Spring Docs,所以不确定为什么这不起作用。

我的代码是

package org.springframework.jmx;

public interface IJmxTestBean {
    public int getAge();
    public void setAge(int age);
    public void setName(String name);
    public String getName();
    public int add(int x, int y);
    public void dontExposeMe();
}

package org.springframework.jmx;

public class JmxTestBean implements IJmxTestBean {

    private String name;
    private int age;
    private boolean isSuperman;

    //getters and setters for each
}

package org.springframework.jmx;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Program {
    public static void main(String[] args) throws InterruptedException {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        context.getBean(JmxTestBean.class);
        Thread.sleep(Long.MAX_VALUE);
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<beans>

   <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"/>

   <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
          <property name="beans">
                 <map>
                        <entry key="bean:name=testBean1" value-ref="testBean"/>
                 </map>
          </property>
          <property name="server" ref="mbeanServer"/>
          <property name="autodetect" value="true"/>
   </bean>

   <bean id="testBean" class="org.springframework.jmx.JmxTestBean">
          <property name="name" value="TEST"/>
          <property name="age" value="100"/>
   </bean>

</beans>

根据我尝试过的类似问题的答案<context:mbean-server/><context:mbean-export/>但这些并没有解决。

它与我的主要方法中的代码有关吗?我试过有无context.getBean(...)...

编辑Spring 日志说INFO: Located managed bean 'bean:name=testBean1': registering with JMX server as MBean [bean:name=testBean1],我可以连接到 JConsole 中的进程,但 MBean 不显示。

Edit#2启用日志记录后,我可以看到MBeanExporter:651 - Located managed bean 'bean:name=testBean1': registering with JMX server as MBean [bean:name=testBean1]

4

1 回答 1

2

解决方案是在服务器 bean 中添加一行

   <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
          <property name="locateExistingServerIfPossible" value="true" />
   </bean>
于 2014-11-25T18:13:20.057 回答