java Managed Bean

实践平台

  1. jdk1.8.0_191
  2. windows10

Java Management Extensions

最基本的功能就是为了管理 java 程序。

JMX 三层架构简介

Instrumentation layer

这个就是 MBean 负责监控应用程序。

JMX agent layer

MBean Server,MBean 注册到 MBean Server 。或者从 MBean Server 注销

Remote management layer

连接到 Java 进程,来观察、操作注册到 MBean Server 里的MBean。规范要求必须以 MBean 或者 MXBean 结尾的类,才被视为被托管的 Bean(Managed Bean),否则就不是。

实例

MBean Interface
public interface GameMBean {

    public void playFootball(String clubName);
    
    public String getPlayerName(); // getter

    public void setPlayerName(String playerName); // setter

}
MBean 实现类
public class Game implements GameMBean {

    private String playerName;

    @Override
    public void playFootball(String clubName) {
        System.out.println(
          this.playerName + " playing football for " + clubName);
    }

    @Override
    public String getPlayerName() {
        System.out.println("Return playerName " + this.playerName);
        return playerName;
    }

    @Override
    public void setPlayerName(String playerName) {
        System.out.println("Set playerName to value " + playerName);
        this.playerName = playerName;
    }
}
测试
import javax.management.*;
import java.lang.management.ManagementFactory;

public class Main {
    public static void main(String [] args){
        try {
            ObjectName objectName = new ObjectName("com.github.io.stardust:type=basic,name=game");
            MBeanServer server = ManagementFactory.getPlatformMBeanServer(); // JMX agent layer
            // 向 MBeanServer 注册这个 GameMBean
            server.registerMBean(new Game(), objectName);
        } catch (MalformedObjectNameException | InstanceAlreadyExistsException |
                MBeanRegistrationException | NotCompliantMBeanException e) {
            // handle exceptions
        }
        while (true) {

        }
    }
}
Jconsole 查看 MBean
  1. 运行 main。
  2. jps 查看 main 的进程 pid。
  3. 运行 jdk1.8.0_191\bin\jconsole.exe 程序。
  4. jconsole 连接本地进程。
    在这里插入图片描述
  5. jconsole 查看注册的 Game 这个 MBean
    在这里插入图片描述
  6. 怎样通过 Game 这个 MBean 管理 Java 程序呢?
    可以在 Jconsole 中修改 PlayerName 这个属性的值。可以看到在 GameMBean 这个接口中定义的 getter 和 setter 来操作这个属性。修改后,点击刷新,控制台输出为:
Set playerName to value stardust
Return playerName stardust
Return playerName stardust

在这里插入图片描述

在 HikariDataSource 中的使用

  /**
    * Default constructor.  Setters are used to configure the pool.  Using
    * this constructor vs. {@link #HikariDataSource(HikariConfig)} will
    * result in {@link #getConnection()} performance that is slightly lower
    * due to lazy initialization checks.
    *
    * The first call to {@link #getConnection()} starts the pool.  Once the pool
    * is started, the configuration is "sealed" and no further configuration
    * changes are possible -- except via {@link HikariConfigMXBean} methods.
    */
   public HikariDataSource()
   {
      super();
      fastPathPool = null;
   }

HikariDataSource 这个 JDBC 数据库连接池一旦启动后,想要修改数据库连接池的配置,只有通过 MBean 才可以修改。
在这里插入图片描述

References

  1. https://www.baeldung.com/java-management-extensions
  2. https://gitee.com/mirrors/hikaricp/blob/dev/src/main/java/com/zaxxer/hikari/HikariDataSource.java
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值