java之JMX
有关JMX的定义和架构就不详解了,见百度百科:
代码实例:
与创建一个普通的bean没什么区别:
package com.doctor.java.jmx;
/**
* @author sdcuike
*
* @time 2016年2月9日 下午9:47:04
*
* @see http://www.journaldev.com/1352/what-is-jmx-mbean-jconsole-tutorial
* The interface name must end with MBean
*/
public interface SystemConfigMBean {
public void setThreadCount(int noOfThreads);
public int getThreadCount();
public void setSchemaName(String schemaName);
public String getSchemaName();
// any method starting with get and set are considered
// as attributes getter and setter methods, so I am
// using do* for operation.
public String doConfig();
}
package com.doctor.java.jmx;
/**
* @author sdcuike
*
* @time 2016年2月9日 下午9:51:53
*/
public class SystemConfig implements SystemConfigMBean {
private int threadCount;
private String schemaName;
public SystemConfig(int threadCount, String schemaName) {
this.threadCount = threadCount;
this.schemaName = schemaName;
}
@Override
public void setThreadCount(int noOfThreads) {
this.threadCount = noOfThreads;
}
@Override
public int getThreadCount() {
return threadCount;
}
@Override
public void setSchemaName(String schemaName) {
this.schemaName = schemaName;
}
@Override
public String getSchemaName() {
return schemaName;
}
@Override
public String doConfig() {
return "No of Threads=" + this.threadCount + " and DB Schema Name=" + this.schemaName;
}
}
然后我们创建一个测试例子:
package com.doctor.java.jmx;
import java.lang.management.ManagementFactory;
import java.util.concurrent.TimeUnit;
import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
/**
* @author sdcuike
*
* @time 2016年2月9日 下午9:56:27
*/
public class SystemConfigManagement {
private static final int DEFAULT_NO_THREADS = 10;
private static final String DEFAULT_SCHEMA = "default";
public static void main(String[] args) throws MalformedObjectNameException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException, InterruptedException {
// Get the MBean server
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
// register the MBean
SystemConfig systemConfig = new SystemConfig(DEFAULT_NO_THREADS, DEFAULT_SCHEMA);
ObjectName objectName = new ObjectName("com.doctor.java.jmx:type=SystemConfig");
mBeanServer.registerMBean(systemConfig, objectName);
do {
TimeUnit.SECONDS.sleep(3);
System.out.println("Thread Count=" + systemConfig.getThreadCount() + ":::Schema Name=" + systemConfig.getSchemaName());
} while (systemConfig.getThreadCount() != 0);
}
}
运行:
运行的时候,我们必须启用虚拟机选项-Dcom.sun.management.jmxremote
运行如图:
现在我们用java工具jconsole修改变量:
修改变量值:
执行修改:
看看我们运行的程序输出:
是不是修改后的属性生效了。