Springboot MBean使用示例解析

 更新时间:2023年06月14日 15:05:51   作者:SparkOnly  
这篇文章主要为大家介绍了Springboot MBean使用示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

MBean,managed bean,被管理的bean,也就是一个被管理的Java对象。

它暴露了一个管理接口,可以包含以下内容:

  • 一系列可读或可写的属性
  • 一系列可调用的操作
  • 自我描述

SpringApplicationAdminMXBean

Springboot里默认有暴露出SpringApplicationAdminMXBean,通过源码可以看出,是在afterPropertiesSet方法注册了mbean,destroy方法取消注册

@Override
public void afterPropertiesSet() throws Exception {
    MBeanServer server = ManagementFactory.getPlatformMBeanServer();
    server.registerMBean(new SpringApplicationAdmin(), this.objectName);
    if (logger.isDebugEnabled()) {
        logger.debug("Application Admin MBean registered with name '" + this.objectName + "'");
    }
}
@Override
public void destroy() throws Exception {
    ManagementFactory.getPlatformMBeanServer().unregisterMBean(this.objectName);
}

该bean本身暴露了两个属性(Ready, EmbeddedWebApplication),两个方法(getProperty, shutdown)

private class SpringApplicationAdmin implements SpringApplicationAdminMXBean {
        @Override
        public boolean isReady() {
            return SpringApplicationAdminMXBeanRegistrar.this.ready;
        }
        @Override
        public boolean isEmbeddedWebApplication() {
            return SpringApplicationAdminMXBeanRegistrar.this.embeddedWebApplication;
        }
        @Override
        public String getProperty(String key) {
            return SpringApplicationAdminMXBeanRegistrar.this.environment.getProperty(key);
        }
        @Override
        public void shutdown() {
            logger.info("Application shutdown requested.");
            SpringApplicationAdminMXBeanRegistrar.this.applicationContext.close();
        }
    }

通过jvisualvm,可以看到具体mbean的信息

jvisualvm-Admin

自己实现

我们自己也可以仿照Admin类,自己实现一个MBean

代码如下,定义了一个MBean: cn.ye:type=Hello

public interface HelloMBean {
    public void sayHello();
    public int add(int x, int y);
    public String getName();
    public int getCacheSize();
    public void setCacheSize(int size);
}
public class Hello implements HelloMBean {
    private final String name = "Reginald";
    private int cacheSize = DEFAULT_CACHE_SIZE;
    private static final int DEFAULT_CACHE_SIZE = 200;
    @Override
    public void sayHello() {
        System.out.println("hello, world");
    }
    @Override
    public int add(int x, int y) {
        return x + y;
    }
    @Override
    public String getName() {
        return this.name;
    }
    @Override
    public int getCacheSize() {
        return this.cacheSize;
    }
    @Override
    public synchronized void setCacheSize(int size) {
        this.cacheSize = size;
        System.out.println("Cache size now " + this.cacheSize);
    }
}

启动类里,注册MBean

public class Application {
    public static void main(String[] args) throws MalformedObjectNameException, NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException {
        SpringApplication.run(Application.class, args);
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
        ObjectName name = new ObjectName("cn.ye:type=Hello");
        Hello mbean = new Hello();
        mbs.registerMBean(mbean, name);
    }
}

启动jvisualvm,可以发现mbean已经注册上去了

其中CacheSize可修改,Name只读

Hello

操作里,也有两个方法,可以正常调用

Hello-Operations

以上就是Springboot MBean使用示例解析的详细内容,更多关于Springboot MBean使用的资料请关注脚本之家其它相关文章!

相关文章

  • Java圆通物流轨迹推送服务接口文档及流程

    Java圆通物流轨迹推送服务接口文档及流程

    这篇文章主要介绍了圆通物流轨迹推送服务接口Java文档,主要用来接收圆通推送的订单状态,本文给大家分享详细流程,感兴趣的朋友跟随小编一起看看吧
    2022-02-02
  • Spring源码解析后置处理器梳理总结

    Spring源码解析后置处理器梳理总结

    这篇文章主要介绍了Spring源码解析后置处理器梳理总结,在前面几篇文章中梳理了Spring中bean的创建过程,在这个过程中各式各样的后置处理器发挥了不同的作用,可以说后置处理器贯穿了bean的实例化以及初始化过程
    2022-07-07
  • @RefreshScope(nacos配置热更新方式)

    @RefreshScope(nacos配置热更新方式)

    文章主要介绍了Spring和Nacos对`@RefreshScope`注解的处理方式,Spring在每次调用被`@RefreshScope`注解的bean的属性时,会先从本地缓存获取,如果缓存不存在则重新创建并获取最新环境配置
    2024-12-12
  • 理解JDK动态代理为什么必须要基于接口

    理解JDK动态代理为什么必须要基于接口

    这篇文章主要介绍了理解JDK动态代理为什么必须要基于接口,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • SpringBoot获取配置信息的三种方式总结

    SpringBoot获取配置信息的三种方式总结

    这篇文章给大家介绍了SpringBoot获取配置信息的三种方式,@Value属性值注入,绑定配置类和通过 environment获取这三种方式,文中通过代码示例给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-01-01
  • Java线程的停止实现原理详解

    Java线程的停止实现原理详解

    这篇文章主要介绍了Java线程的停止实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • Spring Cloud oauth2 认证服务搭建过程示例

    Spring Cloud oauth2 认证服务搭建过程示例

    这篇文章主要为大家介绍了Spring Cloud oauth2 认证服务搭建过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Java多线程Thread基础学习

    Java多线程Thread基础学习

    每一个正在执行的程序都是一个进程,资源只有一块,所以在同一时间段会有多个程序同时执行,但是在一个时间点上,只能由一个程序执行,多线程是在一个进程的基础之上的进一步划分,需要的朋友可以参考下
    2023-04-04
  • Java 实战项目锤炼之IT设备固定资产管理系统的实现流程

    Java 实战项目锤炼之IT设备固定资产管理系统的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java+SSM+jsp+mysql+maven实现一个IT设备固定资产管理系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

    IntelliJ IDEA 中配置 Spring MVC 环境的详细步

    这篇文章主要介绍了IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决,本文分步骤结合实例给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-04-04

最新评论