Java之JMX
??JMX,即Java Management Extensions,Java管理擴展。是一個為應用程序、設備、系統(tǒng)等植入管理功能的框架。
??JMX提供了一種簡單、基礎的方法,用來管理應用、設置、服務等資源。由于JMX是動態(tài)的,你可以使用JMX技術來監(jiān)控和管理處于創(chuàng)建、安裝和運行態(tài)的資源。你甚至可以使用JMX技術監(jiān)控和管理虛擬機。
JMX架構圖:
可以看出,JMX分為三層
StandardMBean
使用StandardMBean 必須為每一個MBean定義一個接口,而且名字限定為xxxMBean
// 接口 public interface DemoMBean {public String getName();public int getAge();public void setName(String name);public void setAge(int age);void init(); }// 具體實現 public class Demo implements DemoMBean {private String name;private int age;@Overridepublic String getName() {return name;}@Overridepublic int getAge() {return age;}@Overridepublic void setName(String name) {this.name = name;}@Overridepublic void setAge(int age) {this.age = age;}@Overridepublic void init() {this.age = 10;this.name = "hehehehehe";} }// agent public class DemoAgent {public static void main(String[] args) {try {MBeanServer server = ManagementFactory.getPlatformMBeanServer();String domainName = "DemoMBean";// 為MBean(下面的new Hello())創(chuàng)建ObjectName實例ObjectName demo = new ObjectName(domainName + ":name=Demo");// 將demo對象注冊到MBeanServer上去server.registerMBean(new Demo(), demo);Thread.sleep(60*60*1000);// demo而已,便于測試,加上了這個線程睡眠} catch (Exception e){e.printStackTrace();}} }// 系統(tǒng)默認的賦值
// 觸發(fā)init方法
// 觸發(fā)init函數,運行完值已經發(fā)生變化了
??這樣我們就可以在本地通過jconsole動態(tài)修改了服務內的數據,在實際發(fā)開中,存在修改線上配置文件的屬性,除了重新部署修改之外,也可以通過類似的方案實現。
??除了本地jconsole工具管理mbean,還可以通過rmi、http等方式管理,原理也類似,遵循jmx的使用協議,在原本寫好的agent上再包裝一層提供給外界使用。
參考鏈接:
https://www.cnblogs.com/trust-freedom/p/6842332.html
總結