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修改变量:
修改变量值:
执行修改:
看看我们运行的程序输出:
是不是修改后的属性生效了。
时间: 2024-10-14 18:50:15