java之JMX
Posted A_Beaver
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java之JMX相关的知识,希望对你有一定的参考价值。
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
![技术分享](https://image.cha138.com/20200613/bbd52ec255a94ff2969f212a83dd617c.jpg)
运行如图:
![技术分享](https://image.cha138.com/20200613/9366f20051874237be1c23e20afece4a.jpg)
现在我们用java工具jconsole修改变量:
![技术分享](https://image.cha138.com/20200613/4fadeb1a487c49368ea63f338c60f0cb.jpg)
修改变量值:
![技术分享](https://image.cha138.com/20200613/0d7b788457494972b647c49f1ebbc8c5.jpg)
![技术分享](https://image.cha138.com/20200613/27960d0a6fd14924ac1c0c57ad0979d4.jpg)
执行修改:
![技术分享](https://image.cha138.com/20200613/cdd7efb340854f488064ee074e423c3b.jpg)
看看我们运行的程序输出:
![技术分享](https://image.cha138.com/20200613/3178134998aa432096da31e04201a972.jpg)
是不是修改后的属性生效了。
以上是关于java之JMX的主要内容,如果未能解决你的问题,请参考以下文章