1、簡介java
Spring的JMX支持提供了一些特性,讓你能透明地將Spring應用程序集成到JMX基礎實施中去。web
確切地說,Spring的JMX支持提供了四種核心特性:spring
2、準備工做瀏覽器
一、 引入Spring2.5所需開發包服務器
二、 引入mx4j-tools.jar包app
三、 開發環境MyEclipse8.0框架
3、代碼實例ui
3.1 applicationcontext.xml代碼this
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- MBeanExporter --> <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" depends-on="mbeanServer"> <property name="beans"> <map> <entry key="LuisFigo:name=config" value-ref="config" /> <entry key="MX4J:name=HttpAdaptor" value-ref="httpAdaptor" /> </map> </property> <property name="server" ref="mbeanServer" /> <property name="assembler"> <bean id="assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler"> <property name="attributeSource"> <bean id="attributeSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" /> </property> </bean> </property> </bean> <!-- MBeanServerFactoryBean --> <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"> </bean> <!-- HttpAdaptor & XSLTProcessor --> <bean id="httpAdaptor" class="mx4j.tools.adaptor.http.HttpAdaptor"> <property name="processor"> <!-- XSLTProcessor --> <bean id="xsltProcessor" class="mx4j.tools.adaptor.http.XSLTProcessor" /> </property> <property name="port" value="8000" /> </bean> <bean id="config" class="com.muyu.jmx.Config"> </bean> </beans>
Spring的JMX框架的核心類是MBeanExporter,這個類負責獲取Spring Bean,而後將其註冊到一個JMX MBeanServer上,要將一個Bean中的屬性和方法暴露成爲一個JMX MBean中的屬性和操做,你只要在配置文件中簡單的配置MBeanExporter一個實例,並根據上面的配置文件中的配置方法將bean傳入便可。 Assembler用於管理bean暴露的接口,Spring JMX提供了一套全面的以及可擴展的機制來控制bean的管理接口。咱們這個例子使用MetadataMBeanInfoAssembler,可以用源碼級元數據給你的Bean定義管理接口。AnnotationJmxAttributeSource說明咱們用註解的方式來管理接口。代理
3.2 config代碼
package com.muyu.jmx; import org.springframework.jmx.export.annotation.ManagedAttribute; import org.springframework.jmx.export.annotation.ManagedOperation; import org.springframework.jmx.export.annotation.ManagedOperationParameter; import org.springframework.jmx.export.annotation.ManagedOperationParameters; import org.springframework.jmx.export.annotation.ManagedResource; @ManagedResource(description = "config") public class Config { private String configLocation; @ManagedAttribute(description = "configLocation 對應的值") public String getConfigLocation() { return configLocation; } @ManagedOperation(description = "控制檯輸出configLocation信息") public void printConfigLocation() { System.out.println(configLocation); } @ManagedOperation(description = "控制檯輸出i_ConfigLocation信息") @ManagedOperationParameters(@ManagedOperationParameter(name="i_ConfigLocation", description="第一個參數")) public void printConfigLocation(String i_ConfigLocation) { System.out.println(i_ConfigLocation); } @ManagedAttribute(description = "賦值給configLocation") public void setConfigLocation(String i_ConfigLocation) { this.configLocation = i_ConfigLocation; } }
3.3 jmxtest代碼
package com.muyu.jmx; import java.io.IOException; import javax.management.MalformedObjectNameException; import mx4j.tools.adaptor.http.HttpAdaptor; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class JMXTest { public static void main(String[] args) throws IOException, MalformedObjectNameException, Exception { ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml"}); HttpAdaptor httpAdaptor = (HttpAdaptor) ctx.getBean("httpAdaptor"); httpAdaptor.start(); } }
說明:
applicationContext.xml配置文件中已經設置httpAdaptor端口號爲8000,運行JMXTest後,經過web瀏覽器登陸http://localhost:8000 圖1所示,點擊LuisFigo:name=config進入圖2頁面,就能夠訪問或者經過暴露的接口操做config了。
4、總結
本節只是介紹了Spring怎樣集成MX4J來管理註冊的bean(固然這裏的bean只是普通的Spring bean,Spring框架採用dynamicMBean來實現JMX),Spring還能夠經過JSR-160鏈接器來構建服務器端和客戶端的鏈接。