JMX(Java Management Extensions,即Java管理擴充套件)是一個為應用程式、裝置、系統等植入管理功能的框架。JMX可以跨越一系列異構作業系統平臺、系統體系結構和網路傳輸協議,靈活的開發無縫整合的系統、網路和服務管理應用。
前面是對JMX的介紹,那麼JMX在我們日常的開發過程中,有什麼實際的意義呢? 相信很多做Java開發的同學都使用過JDK自帶的 jconsole 或者 jvisualvm 監控過JVM的執行情況,但不知道有沒有留意過它們會有一個MBean的功能/標籤,透過MBean可以看到在JVM中執行的元件的一些屬性和操作。下面小編就透過一個SpringBoot應用來一探究竟。並教會你如何自定義擴充套件。
一、SpringBoot中的應用演示
1。 啟動一個SpringBoot應用
下面我們以SpringBoot應用為例子,啟動一個SpringBoot專案。埠是 8080
2。 命令列開啟Jconsole
3。 連線前面的應用
選中MBean標籤,然後可以看到一個SpringApplication的類。shutdown是服務下線。
當我們點選了shutdown方法後,應用就會自動的關閉了。導致Jconsole連線丟失。
getProperty方法是獲取應用中的配置資訊。如圖我們獲取redis的相關資訊。可以看到返回值是Spring應用中我們定義的值6379
那麼其實這個能力就是利用JMX提供的介面來實現的。下面我們透過分析SpringBoot中的原始碼來看它是如何實現的。
二、原始碼追蹤看SpringBoot應用如何實現?
我們透過看Jconsole工具,可以看到工具裡面的類名叫SpringApplication,目錄是admin,於是我們就根據這個推測SpringBoot中的命名,果然我們找到兩個實現類。
1. SpringApplicationAdminMXBean
這個類就是JMX中的MBean,我們可以簡單理解這個裡面的方法都是可以透過Jconsole來呼叫的。透過將這個類註冊給JMX管理器就能實現在Jconsole中的資料展示。
首先看
SpringApplicationAdminMXBean
實現類
SpringApplicationAdmin
,是SpringApplicationAdminMXBeanRegistrar的內部類
2. SpringApplicationAdminMXBeanRegistrar
提供註冊能力。這個類中我們可以知道如何註冊JMX以及如何取消註冊。下面我看這個類如何利用Spring提供的介面能力,來實現應用下線。及註冊到JMX上的吧。
自動化配置將SpringApplicationAdminMXBeanRegistrar宣告成一個Spring中的Bean物件。並配置JMX中的命名及目錄。
1. ApplicationContextAware
獲得讀取上下文能力。在Spring容器中一個bean如何實現了該方法則就可以獲取上下文物件。
2. GenericApplicationListener
獲取處理事件的能力,同樣在Spring中只要實現該介面,就獲取了事件監聽的能力,不過具體監聽什麼事件要自己去判斷。大家可以根據例子來理解。
3. EnvironmentAware
獲取應用配置資訊, 和上面一樣實現了Aware結尾的介面,都能獲取物件的Spring內容的物件例項,然後我們就可以根據該例項,來進行功能擴充套件。
4. InitializingBean
這裡就要著重看了,在初始化時候將MBean註冊到JMX上。當然我們可以透過 @PostConstruct註解來宣告初始化方法。
5. DisposableBean
透過對SpringBoot應用原始碼的追蹤,我們大概已經明白JMX的實際意義了,並且能自定義一個能提供類似能力的MBean了吧,但是JMX能做的遠遠不止如此。
三、自定義MBean
注意介面名必須是MBean結尾,實現類必須去掉MBean;如CustomMBean介面對應的實現類必須是Custom。
1. 程式碼實現
2. 演示
四、總結
透過前面的演示,大概我們對JMX在實際中的用處有一個大概的瞭解了吧。根據這個特性,我們就可以根據我們的需求來定製屬於自己的能力。
最後求關注,求訂閱,謝謝你的閱讀!