文章目录
- 一、基础准备-被测应用
- 二、代码编写-自定义Module
- 三、jvm-sandbox安装及基础命令
- 四、jvm-sandbox demo演示
- 4.1、改变方法返回
- 4.2、异常注入
- 五、资源链接
一、基础准备-被测应用
准备
:先创建一个基础的SpringBoot项目并打jar包后在服务器启动
@RestController
public class MyController {
@GetMapping("/index")
public String index() {
return "SANDBOX TEST";
}
@GetMapping("/test")
public String test() {
try{
calce();
}catch (Exception e){
return "Has Error";
}
return "No Error";
}
public String calce(){
return "";
}
}
预览
: 访问接口返回结果如下
二、代码编写-自定义Module
maven依赖
:创建一个正常的maven项目,在依赖pom.xml文件中添加sandbox的父级依赖。
<parent>
<groupId>com.alibaba.jvm.sandbox</groupId>
<artifactId>sandbox-module-starter</artifactId>
<version>1.2.0</version>
</parent>
代码编写
:实现一个简单改变方法返回值的功能,并打包成jar包待后面使用。
@MetaInfServices(Module.class)
@Information(id = "change-resp")
public class Demo implements Module {
private final static String CLASS_NAME = "com.onetester.springbootdemo.MyController";
private final static String METHOD_NAME = "index";
@Resource
private ModuleEventWatcher moduleEventWatcher;
@Command("changeResp")
public void changeResp(){
new EventWatchBuilder(moduleEventWatcher).onClass(CLASS_NAME).onBehavior(METHOD_NAME).onWatch(new AdviceListener(){
protected void afterReturning(Advice advice) throws Throwable {
ProcessController.returnImmediately(advice.getReturnObj() +": now changed");
}
});
}
}
三、jvm-sandbox安装及基础命令
下载及安装
:
-- 下载
wget http://ompc.oss-cn-hangzhou.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip
-- 解压
unzip sandbox-stable-bin.zip
相关命令
:
命令 | 作用 |
---|---|
./sandbox.sh -p pid | 挂载sandbox到指定进程 |
../sandbox.sh -p pid 'xxxx' | 执行对应的指令 xxx这里代表指令 |
./sandbox.sh -p pid -S | 停止挂载 |
./sandbox.sh -p pid -R | 重新挂载 |
./sandbox.sh -p 8043 -l | 显示挂载的module |
四、jvm-sandbox demo演示
4.1、改变方法返回
上传jar包
:将前面自定义写的一个Module打包jar包后上传到sandbox-module
目录下
查看端口
:使用jps -ml
命令查看启动的java项目进程
挂载模块并执行命令
查看结果
4.2、异常注入
异常注入
:sandbox官方提供了基础的方法异常的代码,可见源码中的DebugRalphModule类,且对应jar包在下载中的example目录下。
启动模块
:将example目录下的sandbox-debug-module.jar文件复制到sandbox-module目录下,并确认挂载的模块存在即可
注入异常
: 给calce注入异常,并使其返回异常,从/test接口返回结果即可看出是否有异常。
./sandbox.sh -p 8043 -d 'debug-ralph/wreck?class=com.onetester.springbootdemo.MyController&method=calce&type=IOException'
五、资源链接
文章中相关代码demo