Spring 2.x jmx 及應用(1)Annotation
現在大部分企業的應用程序都需要application提供監視程序運行的健康狀況和硬件狀況的功能。
舉個例子,前段時間做的一個項目,需要在一臺機器上監視幾十臺client的操作,CPU使用率,內存,硬盤等信息,當CPU,內存使用率過高時,發出通知到該client.甚至操作client的執行動作,都可用jmx做到。
今天將從簡單入手結合jdk的Annotation來實踐Spring對jmx的支持

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

以前jmx的應用需要編寫很長的代碼來實現,現在你只需完成以上配置就可以實現一個簡單的jmx server的程序,jmx server的實現有很多,通常情況下,jmx會需要一個容器例如jboss,現在的方法是將程序本身作為server,這個方式最經典的例子就是個大apserver,我的第一次jmx體驗就是在看jboss源碼時發起的。實現方式不同會用到不同的協議,這里我們需要jmxremote.jar,你可在spring的lib中找到。
現在來看下我們的mbean

2

3

4

5

6

7

8

9

10



11

12

13

14



15



16

17

18

19

20



21


22

23

24



25

26

27

28

29



30

31

32

33

34



35

36

37

38

我們可以到類中定義了幾個方法,monitor server可以通過clientStatus了解到client的狀態,publicMessage是用來主動的發送消息到monitor server,所有不需要想外界暴露。monitor server可以通過
獲得信息中的ObjectName和Ip來連接到client操作mbean.
mbean在jdk的標準實現是需要實現一個以MBean結尾的interface的,其中定義向外界暴露的方法和屬性
現在之需要在類前定義@ManagedResource,在屬性方法前分別用@ManagedOperation或者@ManagedAttribute修飾就可以了,Annotation實在是太方便了。未來將會有更多的應用。
該測試了

2



3

4

5



6



7

8



9

10

11

12

13

現在我們只需要讓Spring加載上面那段bean的定義就好了。jmx mbean server的啟動是不會阻塞主線程的,所以需要保持主線程活著,不然加載完main方法就結束了,mbean server也掛了。
jdk里有個強大的monitor server那就是jconsole,不過一次只有一個連接
大家可以用jconsole來連接到mbean,調用方法或屬性察看結果。
spring jmx很有多有用的功能本人正在挖掘,過段時間再放出一些心得,歡迎有興趣的一起討論。