大名鼎鼎的javaAgent详解
我相信javaAgent大家很少编写,但是在日常的开发或运维中我们经常看见这个javaAgent
如:链路追踪时,我们就会使用javaAgent向java程序中嵌入信息
那么什么是javaAgent呢?笔者将一一道来,如下所示
如:链路追踪时,我们就会使用javaAgent向java程序中嵌入信息
那么什么是javaAgent呢?笔者将一一道来,如下所示
javaAgent简介
JavaAgent是在JDK5开始提出的新特性 她是一种java代理,不是程序程序的一部分,但是支持使用java代理的方式监控和重新定义运行中的服务
javaAgent演示
1.创建agent
public class MyAgent { // premain是javaagent的入口 public static void premain(String agentArgs, Instrumentation instrumentation) { System.out.println("javaAgent" + agentArgs); } }
2.创建MANIFEST.MF,其功能是指定上面premain方法所在的类
Manifest-Version: 2.0 Premain-Class: com.java265.test.MyAgent Can-Redefine-Classes: true
3.创建测试类
public class ApiTest { public static void main(String[] args) { System.out.println("javaAgent 来了"); } }
4.依赖
<properties> <!-- 跳过单元测试 --> <maven.test.skip>true</maven.test.skip> <!-- 自定义MANIFEST.MF --> <maven.configuration.manifestFile>src/main/resources/META-INF/MANIFEST.MF</maven.configuration.manifestFile> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <!-- 就是把前面的配置的MANIFEST.MF打入jar中,以指定premain的位置,否则会报: Failed to find Premain-Class manifest attribute in --> <manifestFile>${maven.configuration.manifestFile}</manifestFile> </archive> </configuration> </plugin> </plugins> </build>
注意事项: 不加打包插件(maven-jar-plugin)报错: Error occurred during initialization of VM agent library failed to init: instrument Failed to find Premain-Class manifest attribute in xxxxxx.jar
5.在VM Options里面添加前面打包好的jar
-javaagent:javaagentPath/target/javaAgent-01-1.0-SNAPSHOT.jar=testagent 参数说明: 1.把javaagentPath换成自己打包之后的项目所在目录; 2.=testagent,是作为参数传递给premain的第一个参数值.
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。