Java 从Jar文件中动态加载类_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java 从Jar文件中动态加载类

Java 从Jar文件中动态加载类

 2015/1/9 12:28:42  qq_25086121  程序员俱乐部  我要评论(0)
  • 摘要:前言JMX即JavaManagemenExtensions,是一个为应用程序植入管理功能的框架。一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。常常在编程的过程中有一些配置信息需要动态的进行改变,我以往会有如下几种做法:写死在Javacode中,环境发生变化的时候修改Javacode写在名为*.properties的配置文件里,使用Java读取配置文件然而今天我们将引入一种高级的方式来进行配置信息的管理,那便是JMX的引入
  • 标签:文件 Java

前言

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 class="java plain">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

?

?

获取【下载地址】

?

发表评论
用户名: 匿名