先来看下规范,标准的定义不太好理解,自己整理了下就比较简单了。
1、接口定义必须是MBean结尾或DynamicMBean结尾,如HelloMBean。
2、实现类去掉MBean。
3、接口和实现类需要在同一个包下。
public interface HelloMBean {
public void sayHello();
public String getName();
public int getCacheSize();
public void setCacheSize(int size);
}
public class Hello implements HelloMBean {
private String name = "World";
private int cacheSize = 100;
public void sayHello() { System.out.println("hello, world"); }
public String getName() { return name; }
public int getCacheSize() { return cacheSize; }
public void setCacheSize(int size) { cacheSize = size; }
public static void main(String[] args) {
try {
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName("com.custom:type=Hello");
server.registerMBean(new Hello(), name);
// 注:这一行很重要,如果只执行一下就没了,那么注册不上的
// 测试完记得关掉,因为while一直跑着很消耗性能
while (true){}
}catch (Exception e){
e.printStackTrace();
}
}
}
运行main方法,该程序会一直执行。
连接 | 新建连接 | 正常应该有Hello,选中即可,就可以看到监控图了。
看下java程序是否还在,如果没有加while,只执行一下,那么肯定看不到。
最后发现是没有在同一个包下。
因篇幅问题不能全部显示,请点此查看更多更全内容