Java 从Jar文件中动态加载类

前言

JMX即Java Managemen Extensions,是一个为应用程序植入管理功能的框架。一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。

常常在编程的过程中有一些配置信息需要动态的进行改变,我以往会有如下几种做法:

  1. 写死在Java code中,环境发生变化的时候修改Java code

  2. 写在名为*.properties的配置文件里,使用Java读取配置文件

然而今天我们将引入一种高级的方式来进行配置信息的管理,那便是JMX的引入。

 

如何使用JMX

JMX做为一份规范,JDK中提供了JMX接口,因此安装了JDK后就可以开发基于JMX的代码了。

JMX具有两层结构,各层的组件如下

工具层

  1. Mbeans

  2. 通知模型:Notification、NotificationListener

  3. Mbeans与数据类:Attribute、Operator

代理层

  1. MBean Server

  2. 代理服务

 

下面学习下log4j2对JMX的支持

 

JMX-log4j2

Log4j 2 开始支持 JMX. StatusLogger, ContextSelector, 和所有的 LoggerContexts, LoggerConfigs 以及 Appenders 使用了MBeans并且可以被远程检测和控制.

 

 

使JMX生效

默认情况下JMX是生效的。当log4j初始化的时候StatusLogger, ContextSelector, 以及所有的LoggerContexts, LoggerConfigs 和Appenders 使用了 MBeans. 当启动JVM时如果想禁用掉JMX则需要在系统配置文件中添加 log4j2.disable.jmx=true .

 

本地监视

本地监视不需要修改任何系统配置文件。使用Java里自带的JConsole工具即可监视你的应用,当安装完JDK之后并配置了环境变量,只需要在终端执行以下命令即可打开可视化的监视界面。

?
1
jconsole

 

远程监视应用

要使远程监视应用有效则需要在启动JVM之前在系统配置文件中添加一下配置.

com.sun.management.jmxremote.port=portNum

其中portNum即指远程应用的端口。

 

Log4j2 检测组件

下面则是Log4j Mbeans在jconsole里的一段截图.

JConsole screenshot of the MBeans tab

 

可视化客户端

Log4j包含了基本的可视化组件,可以监视 StatusLogger 输出以及远程修改Log4j 配置.该客户端可以被当作单独的应用运行,也可以作为JConsole的插件使用。

当作JConsole插件

使用下面的命令启动jconsole

%JAVA_HOME%\bin\jconsole -pluginpath \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar

执行完上述命令后你将可以看到下面包含log4j2标签页的界面

JConsole screenshot of the StatusLogger display

 

远程编辑log4j配置信息

这个GUI工具也包含了简单的编辑器用于编辑log4j配置信息。如下图所示

JConsole screenshot of the configuration file editor

 

 

当作独立的应用运行

执行下面的命令

%JAVA_HOME%\bin\java -cp \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar org.apache.logging.log4j.jmx.gui.ClientGui <options>

上面的options可以为下面三项中的一项

  • <host>:<port>

  • service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi

  • service:jmx:rmi://<host>:<port>/jndi/rmi://<host>:<port>/jmxrmi

此处不得不注意端口号必须与启动应用时所指定的JMX端口号一致

例如在启动应用的时候指定JVM参数信息如下:

com.sun.management.jmxremote.port=33445
com.sun.management.jmxremote.authenticate=false
com.sun.management.jmxremote.ssl=false

紧接着执行下面的命令:

%JAVA_HOME%\bin\java -cp \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar org.apache.logging.log4j.jmx.gui.ClientGui localhost:33445

下面则是相关的两个示例图片:

JMX GUI screenshot of StatusLogger display

JMX GUI screenshot of configuration editor

 

 

获取【下载地址】

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值