spring提供了灵活的MBean方式
除了之前介绍过的Annotation
还有Metadata方式,类似于Annotation
这种方式在创建javadoc时候会给予警告但不会影响doc的创建
package com.xmlasia.spring.test.jmx;
/**
* @@org.springframework.jmx.export.metadata.ManagedResource
* (description="My Managed Bean",objectName="spring:bean=test")
*
*/
public class CommentMBeanManager {
private int clientStatus;
/**
* @@org.springframework.jmx.export.metadata.ManagedOperation
* (description="pause a single proccess")
*
*/
public void pause(String n) {
System.out.println("pause");
}
/**
* @@org.springframework.jmx.export.metadata.ManagedOperation
* (description="shut down the proccess")
*/
public void monitor() {
System.out.println("shutting down...");
}
public void publicMessage() {
System.out.println("publicMessage");
}
/**
* @@org.springframework.jmx.export.metadata.ManagedAttribute
* (description="client status")
*/
public int getClientStatus() {
return clientStatus;
}
public void setClientStatus(int clientStatus) {
this.clientStatus = clientStatus;
}
}
使用这种方式需要改变attributeSource的实现类
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- mbean -->
<bean id="mbeanManager"
class="com.xmlasia.spring.test.jmx.CommentMBeanManager" />
<!-- JMX configuration -->
<bean id="mbeanServer"
class="org.springframework.jmx.support.MBeanServerFactoryBean">
</bean>
<!-- 注意这里将更换为AttributesJmxAttributeSource -->
<bean id="attributeSource"
class="org.springframework.jmx.export.metadata.AttributesJmxAttributeSource">
<property name="attributes">
<bean
class="org.springframework.metadata.commons.CommonsAttributes" />
</property>
</bean>
<bean id="assembler"
class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
<property name="attributeSource" ref="attributeSource" />
</bean>
<bean id="mBeanExporter"
class="org.springframework.jmx.export.MBeanExporter">
<property name="server" ref="mbeanServer" />
<property name="assembler" ref="assembler" />
<property name="beans">
<!-- 将mbean注册到mBeanExporter -->
<map>
<entry key="mbean:name=testBean"
value-ref="mbeanManager" />
</map>
</property>
</bean>
</beans>
其他照旧不需修改
如果你有很多mbean spring也提供了很好的解决方法
你只需在修改mBeanExporter的属性autodetect=true
<bean id="mBeanExporter"
class="org.springframework.jmx.export.MBeanExporter">
<property name="server" ref="mbeanServer" />
<property name="assembler" ref="assembler" />
<property name="autodetect" value="true" />
</bean>
spring会搜索context中所有被ManagedResource标记的mbean自动进行注册
另一种方式类似于标准的jmx mbean实现,用interface来定义将要暴露的Attribute和Operation
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- mbean -->
<bean id="mbeanManager"
class="com.xmlasia.spring.test.jmx.CommentMBeanManager" />
<!-- JMX configuration -->
<bean id="mbeanServer"
class="org.springframework.jmx.support.MBeanServerFactoryBean">
</bean>
<!--使用接口来描述mbean-->
<bean id="assembler"
class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
<property name="managedInterfaces">
<value>
com.xmlasia.spring.test.jmx.ICommentMBeanManager
</value>
</property>
</bean>
<bean id="mBeanExporter"
class="org.springframework.jmx.export.MBeanExporter">
<property name="server" ref="mbeanServer" />
<property name="assembler" ref="assembler" />
<property name="beans">
<!-- 将mbean注册到mBeanExporter -->
<map>
<entry key="mbean:name=testBean"
value-ref="mbeanManager" />
</map>
</property>
</bean>
</beans>
我们可以通过refactor快速的将CommentMBeanManager的方法和属性抽取到ICommentMBeanManager中。
注意managedInterfaces是一个Class[]的类型不用担心很多接口的问题。
最后注册mbean是有3种行为的分别是
REGISTRATION_FAIL_ON_EXISTING mbean已经存在将会抛出InstanceAlreadyExistsException异常
REGISTRATION_IGNORE_EXISTING 忽视后来注册的mbean
REGISTRATION_REPLACE_EXISTING 覆盖掉之前注册的mbean
通过MBeanExporter的registrationBehaviorName属性进行设定
<bean id="mBeanExporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="server" ref="mbeanServer"/>
<property name="assembler" ref="assembler"/>
<property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/>
</bean>
同样用jconsole进行测试
要了解springjmx前还是要需要掌握jdk对jmx定义,jmx在维护application方法是有很好的应用的。
继续挖掘中
分享到:
相关推荐
在Spring中集成JMX(Java Management Extensions)技术,可以使我们能够远程管理和监控应用中的对象,比如动态修改服务端的属性,这对于调试和性能优化非常有帮助。本教程将引导你入门Spring框架下的JMX应用。 首先...
2. 注册MBean:在Spring配置文件中,使用`<bean>`标签定义MBean,并使用`<jmx:mbean>`和`<jmx:mbean-server>`标签将MBean注册到JMX服务器。 3. 使用Spring的JMX支持:Spring提供了`...
1. **JMX与Spring 结合实例**:在Spring应用中,可以通过配置或者编程方式来注册MBeans(Managed Beans),这些MBeans代表了应用中的特定组件或服务。Spring 提供了`PlatformMBeanServer`的自动配置,可以方便地将...
8. **JMX与Spring**:Spring框架集成了JMX,使得在Spring应用中使用JMX变得简单。Spring的`@ManagedResource`注解可以自动将bean暴露为MBean,而`@ManagedAttribute`和`@ManagedOperation`可以分别标记可管理的属性...
JMX可以与其他Java技术结合使用,如Spring框架中的Spring JMX,它提供了更方便的集成方式。此外,许多开源工具和应用服务器,如JConsole、VisualVM等,都利用JMX来提供可视化的监控界面。 总的来说,`jmx-1_2_1-ri....
这份文档通常会详细讲解Spring JMX的配置、MBean的创建、MBeanServer的使用,以及如何在Spring应用中集成和利用JMX进行监控和管理。通过阅读这份资料,你将能够理解Spring JMX的全貌,掌握如何在实际项目中有效地...
首先,**Spring对JMX的支持**使得在Spring应用中注册MBeans(Managed Beans)变得简单。MBeans是JMX的核心组件,它们是可管理的对象,提供了对特定资源或服务的访问和控制。Spring通过`MBeanServer`接口和`...
总的来说,JMX和MBean Server提供了一种标准、灵活的管理方式,使得Java应用的管理和监控变得更加便捷。通过结合Spring框架,开发者可以更轻松地在应用中集成JMX功能,实现对应用的全方位管理。
20.5.2. Remote Update 21. Packaging Your Application for Production 22. What to Read Next IV. Spring Boot features 23. SpringApplication 23.1. Startup Failure 23.2. Customizing the Banner 23.3. ...
13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. hidden标签...
mbs.registerMBean(mbean, mbean.getObjectName()); // 现在可以在JConsole或其他JMX客户端中找到并管理这个MBean } ``` 在这个例子中,我们创建了一个名为`MyManagedBean`的MBean,它有一个计数器属性。然后,...
13.11.2. 对模型的支持:ModelMap (ModelAndView) 13.11.3. 对视图的支持: RequestToViewNameTranslator 13.12. 其它资源 14. 集成视图技术 14.1. 简介 14.2. JSP和JSTL 14.2.1. 视图解析器 14.2.2. 'Plain-...
Spring通过`MBeanExporter`类将Spring Bean注册到MBean服务器,这些Bean可以是标准的JMX MBean,也可以是自动转换的Spring Bean。此外,Spring还支持自定义的MBean信息,如MBean的名称、描述、属性和操作。 **JMX的...
13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. ...
23.6.2. 在Spring环境中使用YAML暴露属性 iii. 23.6.3. Multi-profile YAML文档 iv. 23.6.4. YAML缺点 vii. 23.7. 类型安全的配置属性 i. 23.7.1. 第三方配置 ii. 23.7.2. 松散的绑定(Relaxed binding) iii. 23.7...
13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. checkboxes标签 13.9.6. radiobutton标签 13.9.7. radiobuttons标签 13.9.8. password标签 13.9.9. select标签 13.9.10. option标签 ...
2. **Spring与JMX整合**: - **Spring的MBeanExporter**:Spring提供的工具类,负责将Spring容器中的bean注册为MBeans。 - **@ManagedResource**:Spring提供的注解,用于标记一个类为MBean,定义其管理属性和操作...
11.7.2. 处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中...
学习JMX,需要理解其基本概念,熟悉MBean的创建和注册,掌握如何使用JMX Connectors进行远程监控,以及如何利用JMX进行应用性能调优。对于开发者而言,JMX是提高应用可维护性和可管理性的重要工具。通过深入学习和...
2. **创建MBean**:定义一个Java类,该类遵循JMX规范,实现MBean接口或扩展MBean基类。MBean是JMX中的管理实体,可以暴露应用程序的状态和操作。 3. **注册MBean**:Spring通过`MBeanExporter` bean来注册MBean。在...