我知道这已经被问过很多次了,但我无法解决我的问题。我已经设置了一个基本示例,将 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]