大名鼎鼎的javaAgent详解

乔欣 Java经验 发布时间:2022-12-16 06:44:57 阅读数:11820 1
我相信javaAgent大家很少编写,但是在日常的开发或运维中我们经常看见这个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的第一个参数值.
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202212/16711443655166.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者