欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 从Jar文件中动态加载类 博客分类: java java 

程序员文章站 2024-03-25 12:12:04
...

前言

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里的一段截图.

Java 从Jar文件中动态加载类
            
    
    博客分类: java java 

 

可视化客户端

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标签页的界面

Java 从Jar文件中动态加载类
            
    
    博客分类: java java 

 

远程编辑log4j配置信息

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

Java 从Jar文件中动态加载类
            
    
    博客分类: java java 

 

 

当作独立的应用运行

执行下面的命令

%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

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

Java 从Jar文件中动态加载类
            
    
    博客分类: java java 

Java 从Jar文件中动态加载类
            
    
    博客分类: java java 

 

 

获取【下载地址】

Java 从Jar文件中动态加载类
            
    
    博客分类: java java 

 

相关标签: java