【JMX】-----JMX管理Spring Bean(一)

本文介绍了如何使用Spring的JMX模块将Spring Bean导出为MBean,详细阐述了通过MBean服务器创建、通过名称暴露方法、使用接口定义MBean属性和操作以及注解驱动MBean等步骤,并探讨了处理MBean冲突的方法。
摘要由CSDN通过智能技术生成

1. 介绍

Spring对DI的支持是通过在应用中配置Bean属性,如果应用已经部署并且正在运行,单独使用DI并不改变应用的配置。对于正在运行的应用并要在运行时改变应用的配置,可以使用java管理扩展(Java Management Extension ,即JMX)。JMX管理应用的重要组件是MBean服务器(MBean Server)和MBean(Managed bean,译为托管bean),MBean服务器充当着MBean的容器和注册表。MBean是暴露特定方法的JavaBean,这些特定方法定义了管理接口。JMX规范定义了四种类型的MBean:

MBean类型 英文全称 描述
标准MBean Standard MBean 标准MBean的管理接口是通过在固定的接口上执行反射确定的,bean类会实现这个接口
动态MBean Dynamic MBean 动态MBean的管理接口是在运行时通过调用DynamicMBean接口的方法来确定的。因为管理接口不是通过静态接口定义的,因此可以在运行时改变
开放MBean Open MBean 开放MBean是一种特殊的Dynamic MBean,其属性和方法只限定于原始类型,原始类型的包装类以及可以分解为原始类型或者原始类型包装类的任意类型
模型MBean Model MBean 模型MBean也可以是一种特殊的Dynamic MBean,用于充当管理接口与受管理资源的中介。模型Bean并不像他们所声明的那样来编写。他们通过工厂生成,工厂会使用元信息来组装管理接口

具体可以查看文章【JMX】-----JMX概述
Spring的JMX模块可以将Spring bean导出为模型MBean,此时可以查看应用程序内部情况并且更改配置,甚至是在应用程序的运行期。以下将介绍通过Spring JMX管理Spring应用上下文中的bean。

2.将spring Bean导出为MBean

Spring的MBeanExporter是将Spring Bean转变为MBean的关键。MBeanExporter可以把一个或者多个Spring bean导出为MBean服务器(MBean Server)内的模型MBean,MBean服务器是MBean生存的容器和注册表。对MBean访问是通过MBean服务器来实现的。下面编写一个简单的Spring bean,并通过MBeanExporter导出为MBean。
【步骤一】:编写一个Spring bean。

public class SpittleController {
   
  
  public static final int DEFAULT_SPITTLES_PER_PAGE=25;
  private int spittlesPerPage = DEFAULT_SPITTLES_PER_PAGE;

  public int getSpittlesPerPage() {
   
    return spittlesPerPage;
  }

  public void setSpittlesPerPage(int spittlesPerPage) {
   
    this.spittlesPerPage = spittlesPerPage;
  }
  
  @RequestMapping("/home")
  public String home() {
   
    String result = "spittlesPerPage--"+spittlesPerPage;
    System.out.println(result);
    return result;
  }
}

【步骤二】:使用Java类配置,通过MBeanExporter将Spring bean导出为MBean。

@Configuration
public class JavaConfig {
   

  @Bean 
  public MBeanExporter mbeanExporter(SpittleController spittleController) {
   
    MBeanExporter exporter = new MBeanExporter();
    Map<String,Object> beans = new HashMap<>();
    //每个MBean有唯一的ObjectName名称;格式是域名:key-value
    beans.put("spitter:name=SpittleController", spittleController);
    exporter.setBeans(beans);
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值