Spring配置JMX

 Spring与JMX集成,实现方式灵活而且简单,主要体现在:

1、可以自动探测实现MBean接口的MBean对象,而且可以将一个普通的Spring Bean注册为MBean;

2、定制管理MBean的接口,根据需要暴露特定管理MBean的操作;

3、使用注解定义MBean管理接口;

4、可以实现对本地和远程MBean的代理。


初探学习:



public class HusbandLocal {  
  
    // 属性  
    private String name;  
    private int age;  
    private String message;  
  
    // set,get  
    public String getName() {  
        System.out.println("name:"+name);  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        System.out.println("age:"+age);  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public String getMessage() {  
        System.out.println("message:"+message);  
        return message;  
    }  
  
    public void setMessage(String message) {  
        this.message = message;  
    }  
  
    // 额外的操作,方法  
    public void call(String message) {  
        System.out.println("丈夫的call:" + message);  
    }  
      
    public void look(){  
        System.out.println("发现发廊");  
    }  
      
    public void playDOTA(){  
        System.out.println("这个不用解释了吧~DOTA");  
    }  
  
}



<?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-3.0.xsd">  
  
    <!-- 暴露监控设备 -->  
    <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"  
        lazy-init="false">  
        <property name="beans">  
            <map>  
                <entry key="bean:name=HusbandLocal" value-ref="HusbandLocal" />  
            </map>  
        </property>  
    </bean>  
  
    <!-- mbean -->  
    <bean id="HusbandLocal" class="jmx.HusbandLocal" />  
</beans>
org.springframework.jmx.export.MBeanExporter 是Spring暴露管理Bean(MBean)的核心类之一。它使用一个Map类型的属性——beans记录要暴露MBean的类。将咱们刚刚写的HusbandLocal以属性注入的方式注入进去。之后写一个加载Spring文件的main实例,开启服务。



ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
                "applicationContext.xml");  
  
        // 通过死循环保证主线程一直运行  
        while (true) {  
  
        }
访问jconsole(%java_home%/bin/jconsole.exe)


Spring配置JMX_第1张图片


点击进去后可以查看咱们刚才暴露的MBean,如下Spring配置JMX_第2张图片

 我们可以点击MBean的操作,比如playDOTA(),后台就调用了该方法。在这个界面还可以看到MBean的属性值,你叫他们状态也行。

以上是本地监控MBean对象,下面看看远程监控

需要在spring配置文件添加如下:

<!-- 远程连接 RMI方式-->  
    <!--  
        地址输入  
        service:jmx:rmi://localhost/jndi/rmi://192.168.1.100:8080/myconnector  
    -->  
    <bean class="org.springframework.jmx.support.ConnectorServerFactoryBean"  
        depends-on="rmiRegistry" lazy-init="false">  
        <property name="objectName" value="connector:name=rmi" />  
          
        <!-- 远程连接的地址 -->  
        <property name="serviceUrl"  
            value="service:jmx:rmi://localhost/jndi/rmi://localhost:8080/myconnector" />  
    </bean>  
      
    <!-- 使用JNDI-RMI的方式进行远程连接通讯,并且配置占用端口号 -->  
    <bean id="rmiRegistry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">  
        <property name="port" value="8080" />  
    </bean>
刚才我们将我们的MBean注册到一个基于RMI访问方式的连接服务上(ConnectorServerFactoryBean),占用的端口是8080。这时启用jconsole 以远程方式连接,不用输入密码,如下图所示


Spring配置JMX_第3张图片

之后和在本地操作一样,可以监控MBean的属性状态,也可以进行相应的操作。

(这里俺在这里墨迹了很久,点击连接时候总是连接不上,后来才发现,spring配置文件默认bean的default_init=true的原因)

<bean class="org.springframework.jmx.support.ConnectorServerFactoryBean"  
        depends-on="rmiRegistry" lazy-init="false">

5.  监控Web容器

如果我们要监控一下Web服务器,比如Tomcat服务器的JVM状态怎么办?这种场景非常的常见。其实配置也很简单。我们打开{Tomcat_HOME}/bin/catalina.bat,在linux下是{Tomcat_HOME}/bin/catalina.sh文件。将原有的脚本

set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
改为

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=10090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
运行startup.bat文件,之后开启JConsole,远程登录 tomcat

Spring配置JMX_第4张图片

之后即可查看远程Tomcat资源

Spring配置JMX_第5张图片

还有很多疑问,待续


摘自:

分布式应用学习笔记08JMX规范与常用的监控场景

文献:

Spring与JMX集成

你可能感兴趣的:(spring,jmx)