Java-Agent 环境搭建 | 学习笔记

简介: 快速学习 Java-Agent 环境搭建

开发者学堂课程【分布式链路追踪 Skywalking:Java-Agent 环境搭建】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/743/detail/13165


Java-Agent 环境搭建


内容介绍:

一、java agent 是什么

二、如何使用 java agent


一、java agent 是什么

Java agent 本质上是 java 命令的一个参数。

参数 java agent 可以用于指定一个 jar 包。使用java-agent技术可以实现stylewalking实时监控。

Jar 包的两点要求如下:

1. jar  包的 MANIFESTMF 文件必须指定 Premain-Qlass 项。

2. Premain-Class 指定的那个类必须实现 premain ()方法。方法名是固定的,当java 虚拟机启动时,在styleworking-agent.jia中执行后执行main函数,这样JVM 的特征就可以执行一些初始化的操作。


二、如何使用 java agent

首先定义一个 MANIFESTMF 文件,必须包含 Premain-Class 选项,这个选项指定了类,这个类中必须包含 premain 方法,这个方法也是java agent 的启动方法,这个方法是一个静态方法,方法逻辑由用户自己决定。然后将 premain 的类和 MANIFESTMF 文件统一进行打包,打包成一个 jar 包。最后在应用项目中使用参数 -iava agent:jar 包路径启动要代理的方法。那么此时在启动之后就会先执行 jar 包中的 premain 方法,然后再执行main方法。

接下来演示代码如何操作:

首先创建一个工程,这个工程不需要额外的,只需要最基本的代码,把它放在c盘下。

生成完第一步就是编写一个 premain 方法,这个方法有参数要求,方法名是固定的不能随意更改。添加两个参数,第一个叫angentparam参数,第二个叫 instrumentation 参数,这个参数能操作一些类的方法,提供了一些类转换的方法,在代码里打出 premain 执行,然后再把参数打进去,这是 premain 方法写完了。

代码如下:

import java.lang.instrument.Instrumentation;

public class PreMainAgent {public static void premain(string agentparam,Instrumentation inst){

System.out.println("premain执行");

system.outprintln(agentparam);

还需要编写一个 MIMIFEXT 文件,这个文件编辑起来相对麻烦,同时还需要对它进行打包,打包的时候需要对插件进行处理,最方便的方法是使用一个插件,这个插件叫做 maven-asemb.plugin 组装插件,可以把代码拷贝一下,把它拷贝到pom中。

代码如下:

<manifest>

<addClasspath>true</addClasspath></manifest>

<manifestEntries>

<Premain-Class>PreMainAgent</Premain-Class>

<Agent-Class> PreMainAgent</Agent-Class>

<Can-Redefine-Classes>true</Can-Redefine-Classes>

<Can-Retransform-Classes>true</Can-Retransform-Classes>

</manifestEntries></archive></configuration><executions>

<execution>

<id>make-assembly</id><phase>package</phase><goals>

<goal>single</goal>

</goals>

</execution>

</executions>

</plugin>

</plugins>

</build>

这个代码最重要的部分是<Premain-Class>PreMainAgent</Premain-Class>部分,需要制定 篇remain 的位置,这时把文件指定到 PreMainAgent 位置,此时当它启动时会执行premainagent 中的 premain 方法。

另外代码中添加了 jar-with-dependencies依赖,也就是说无论添加什么依赖,所有的依赖都可以打包在 jar 包里。

<Can-Retransform-Classes>true</Can-Retransform-Classes>,这样就可以自动生成 MINIFEXT 文件。

接下来来测试一下,对它进行打包,通过 pacakage 进行打包,此时 target 应该已经编译出来了这个 class 文件,同时这个 jar 包也打包完成了。

image.png

光打包还不行,打包以后还需一个测试的项目进行 agent 测试。再创建一个模块,把代码生成到C盘下面,与 agent-demo 同级,点击 finish,创建目录,user 的创建方法计较简单,因为再 main 方法中就能够执行,所以提供一个 main 方法。

接下来就可以使用 agent,首先拷贝代码,然后通过启动这个 main

方法查看他的执行位置,

image.png

现在只有 main 方法执行这一条记录,然后

把 java-agent 添加上去,在后面还可以通过添加等号添加一些参

数,继续执行 main 方法,可以看到 agent 已经呗加载

进去了,先执行premain 方法,也就是再demo中执行了 premain,

第二步再打印一个参数,最后执行 main 方法。

这个跟之前说的执行顺序是一致的:先执行 Java 中的premain方

法,再执行 main 方法。

image.png对于premain还有另外一种写法,方法拷贝一下,可以把第二个参

数值去掉,如果第一种写法的两个参数不存在,就可以打印这种,单

个参数的方法,然后打包一下。

现在是执行1,把执行1屏蔽掉进行打包后,看执行2

是否会执行,可以看到执行2也成功了。

可以看到逻辑是这样的:当两个参数的 premain 方法存在时,调用

两个参数的方法;当两个参数的 premain 方法不存在时,调用一个

参数的方法。

代码如下:

import java.lang.instrument.Instrumentation;

public class PreMainAgent {public static void premain(string agentparam,Instrumentation inst){

System.out.println("premain执行");

system.outprintln(agentparam);

{

以上就是 java agent 的简单用法,他的逻辑是,当需要执行 main

方法是,会先执行jar 包中的 premain 方法。

相关文章
|
21天前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
290 1
|
3月前
|
Java API 微服务
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
201 5
|
6月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
89 13
|
4月前
|
IDE Java 开发工具
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
IntelliJ IDEA创建Java项目的图文详细步骤,手把手带你创建Java项目
584 10
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
|
3月前
|
前端开发 Java 数据库
2025 版大学四年学好 Java 并成功拿到 offer 的技术选型与环境搭建全攻略
这篇指南为大一新生提供了系统化的Java学习路线,涵盖环境搭建、核心技术实战与项目经验。首先推荐使用IntelliJ IDEA和OpenJDK 21,掌握函数式编程、异常处理及虚拟线程等关键技能。其次通过图书馆管理系统项目实践MVC架构,结合Spring Boot与H2数据库巩固知识。规划建议从基础语法到集合框架逐步深入,并参与开源项目提升能力。配套在线课程与技术社区资源助力高效学习,助你在大学四年打下坚实基础,顺利拿到offer。
87 0
|
3月前
|
Cloud Native Java Devops
Java 学习路线之环境搭建微服务项目实战及 DevOps 流程实操内容解析
这是一份结合最新技术的Java学习路线,涵盖环境搭建、微服务项目实战及DevOps流程。内容包括2025年版开发环境配置(如SDKMAN管理JDK、)、Gradle构建工具使用、微服务图书管理系统实战(Spring Boot 3.3 + Spring Cloud 2025.0)、云原生部署)、AI融合实践(OpenAI集成)以及性能优化与监控(JFR/Micrometer/Sleuth)。通过每日实践、代码审查和技术分享,帮助你掌握现代企业级开发技能,实现云原生应用的独立开发与部署。资源地址:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
304 0
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
264 4
|
6月前
|
开发框架 Java 开发工具
【Java全栈学习笔记-U1-day01】Java介绍
本笔记整理了Java学习的基础内容,涵盖程序理解、Java语言特性、JDK安装与配置、Java程序开发工具及编写步骤。重点介绍了Java程序的基本结构、编译和运行过程,以及输出语句的使用。通过实例演示了IDEA创建Java程序的方法,并强调了编码规范和注意事项。适合初学者复习和交流学习。 主要内容: 1. 理解程序:计算机组成、程序定义。 2. 简介:Java语言特点、技术平台、JDK作用。 3. 编写Java程序:编写、编译、运行步骤,基本结构。 4. 输出语句 5. DEA使用:新建工程、保存位置、文件介绍、新建类。 6. 扩展:注释、代码规范、大小写敏感、缩进等。
|
10月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
12月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)

热门文章

最新文章