基于Spring+JMX+Tomcat实现资源动态管理
JMX(Java管理扩展)用于管理资源、设备网络等。远程管理程序可以提供运行态时修改程序的属性或者调用程序的方法。本文基于JMX,结合Spring管理bean,Tomcat容器装载bean,实现资源的动态管理。
一、JMX
JMX将其要管理的设备装配成MBean,在MBean中暴露需要开放的接口和属性。然后将MBeans注册到MBean server中,有远程管理程序通过不同的协议进行访问。JMX首先加入到Java SE 6版本中,低版本的需要下载sun的JMX实现:
<!-- https://mvnrepository.com/artifact/org.jvnet.opendmk/jmxremote_optional --> <dependency> <groupId>org.jvnet.opendmk</groupId> <artifactId>jmxremote_optional</artifactId> <version>1.0_01-ea</version> </dependency> |
Spring提供注解支持JMX,常用的注解有:
注解 | 说明 | 作用域 |
@ManagedResource | 将类的所有实例标识为JMX受控资源 | Class 类 |
@ManagedOperation | 将方法标识为JMX操作 | Method方法 |
@ManagedAttribute | 将getter或者setter标识为部分JMX属性 | 仅getters和setters方法 |
@ManagedOperationParameter | 定义操作参数说明 | Method 方法 |
工程中通过ServerManager定义接口(MBean),由于spring的支持,该MBean不需要以MBean结尾。ServerManagerImpl实现接口并暴露方法和属性。
二、Spring JMX
Spring提供对JMX的支持,具体的标签详见工程中的:JmxTest-context.xml。此外,工程需要提供web.xml,用于Tomcat启动时通过spring加载bean。
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/JmxTest-context.xml</param-value> </context-param> |
三、Tomcat
Tomcat启动支持JMX需要添加启动参数:
-Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false |
四、使用
可以通过JMX API编写客户端程序进行访问,例如JmxTest.java。此外,还可以使用JConsole访问。步骤如下:
1. win+r运行jconsole,选择远程连接并填入ip:port。
2. 选择MBean标签,即可看到暴露的MBean属性和接口。
PS:工程下载地址如下。
http://download.csdn.net/detail/conanswp/9913271