1、前言
JMX管理及使用日趋成熟。spring对bean的管理功能也很强大,通过annotation把某些方法暴露成MBean,然后通过JMX远程管理,在某些场景下会带来意想不到的效果。
本文只介绍两个内容:spring通过annotation暴露MBean、相关的xml配置。
2、spring通过annotation暴露MBean
2.1 涉及到三个重要的annotation:@ManagedResource @ManagedAttribute 和 @ManagedOperation。
用途 Commons Attributes属性 JDK 5.0注解 属性/注解类型
将类的所有实例标识为JMX受控资源 | ManagedResource |
@ManagedResource |
Class 类 |
将方法标识为JMX操作 | ManagedOperation |
@ManagedOperation |
Method方法 |
将getter或者setter标识为部分JMX属性 | ManagedAttribute |
@ManagedAttribute |
Method (only getters and setters) 方法(仅getters和setters) |
定义操作参数说明 | ManagedOperationParameter |
@ManagedOperationParameter 和 @ManagedOperationParameters |
Method 方法 |
2.2 看了上面官方解释,应该有个大概的了解,下面再举个例子。
- @ManagedResource(objectName="bean:name=lionbuleTest", description="My Managed Bean")
- public class AnnotationTestMBean{
- private String name;
- private int age;
- @ManagedAttribute(description="The Name Attribute")
- public void setName(String name) {
- this.name = name;
- }
- @ManagedAttribute()
- public String getName() {
- return name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- @ManagedOperation(description="Add two numbers")
- @ManagedOperationParameters({
- @ManagedOperationParameter(name = "x", description = "The first number"),
- @ManagedOperationParameter(name = "y", description = "The second number")})
- public int add_1(int x, int y) {
- return x + y;
- }
- @ManagedOperation
- public int add_2(int x, int y){
- return x + y;
- }
- public void dontExposeMe() {
- throw new RuntimeException();
- }
- }
2.3 Jconsole的管理界面截图:
图1、查看已暴露MBean的属性
图2、查看已暴露MBean的方法
2.4 解释说明:
1、@ManagedResource @ManagedAttribute 和 @ManagedOperation 还有许多参数,具体使用请参考spring官方手册。( spring手册[2.5.3] ---- 20.3.4. 源代码级的元数据类型)
2、@ManagedOperationParameters 是对@ManagedOperation的补充。具体看代码样例中的add1方法上的注解,然后再看图2(查看已暴露MBean的方法)的add1方法和 add2的区别。添加参数说明的add1方法会显示出参数名,而add2方法则是默认的参数名p1/p2。
3、没有添加@ManagedOperation和@ManagedAttribute的方法,在图2中就没有看到,说明添加了注解的方法暴露MBean是可用的。
4、@ManagedOperation和@ManagedAttribute的区别,请查看2.1的详解。
3、xml配置
方式一、通用spring bean配置
- <bean id="jmxAttributeSource"
- class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>
- <!-- 使用注解元数据创建管理接口 -->
- <bean id="assembler"
- class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
- <property name="attributeSource" ref="jmxAttributeSource"/>
- </bean>
- <!-- 从注解中得到ObjectName -->
- <bean id="namingStrategy"
- class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
- <property name="attributeSource" ref="jmxAttributeSource"/>
- </bean>
- <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
- <property name="assembler" ref="assembler"/>
- <property name="namingStrategy" ref="namingStrategy"/>
- <property name="autodetect" value="true"/>
- </bean>
- <!-- 配置服务器端连接器RMI -->
- <bean class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
- <property name="port" value="2088"/>
- </bean>
- <bean id="serverConnector"
- class="org.springframework.jmx.support.ConnectorServerFactoryBean">
- <property name="objectName" value="connector:name=rmi"/>
- <!-- 客户端链接地址配置 -->
- <property name="serviceUrl"
- value="service:jmx:rmi://localhost/jndi/rmi://localhost:2088/myconnector"/>
- </bean>
- <!-- 自定义的mbean -->
- <bean id="annotationTestMBean" class="com.lionbule.biz.test.AnnotationTestMBean">
- <property name="name" value="TEST"/>
- <property name="age" value="100"/>
- </bean>
配置中,已经加了相应的注释。还不是很清楚,可以查询spring官方手册。
方式二、简化spring-context配置
- <?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:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd"
- default-autowire="byName">
- <context:mbean-export default-domain="ShowCase" registration="replaceExisting" />
- <!-- 自定义的mbean -->
- <bean id="annotationTestMBean" class="com.lionbule.biz.test.AnnotationTestMBean">
- <property name="name" value="TEST"/>
- <property name="age" value="100"/>
- </bean>
- </beans>
注意:方式二对ClassName和beanName有约束,请以‘MBean’结尾。
4、客户端工具连接
常用的客户端工具:Jconsole、jvisualvm、jmanager等。
连接方式有多种,但本案只介绍了RMI连接管理,所以本案的链接地址为:
- service:jmx:rmi://localhost/jndi/rmi://localhost:2088/myconnector
参考资料:
1、spring官方手册
http://static.springsource.org/spring/docs/2.5.x/reference/jmx.html#jmx-interface
相关推荐
Spring_Annotation_AOP
Spring Annotation
spring的Annotation注解.
Spring annotation 样例
Spring的Annotation配置相关讲义
Spring+mybatis annotation形式 进行增删查改,使用maven容器,配置完整,自己运行多次无问题
Spring IOC Annotation 注入 学习实例
jmx 实例 rmi mbean,采用rmi方式进行jmx的mbean管理,通过这个实例能够了解jmx的应用
spring使用annotation整合dwr笔记 spring使用annotation整合dwr笔记 spring使用annotation整合dwr笔记
详解 Spring 3.0 基于 Annotation 的依赖注入实现。。详解 Spring 3.0 基于 Annotation 的依赖注入实现。。
马士兵视频里的struts2 hibernate3 spring2.5 annotation 整合 绝对好用 里面还有jar包 部署就可以用
详解Spring基于Annotation的依赖注入实现
spring的annotation的autowired配置方法。
SpringMVC Spring MyBatis 框架整合 Annotation Maven Project
Spring_Annotation_IOC
spring 使用annotation替代xml配置实例
spring annotation注解 使用Spring注解来注入属性
Struts1.3 + Hibernate3.3 + Spring3.0 Annotation整合