java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Springboot MBean使用

Springboot MBean使用示例解析

作者: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使用的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文