文章目录
- 一、基础准备-被测应用
- 二、代码编写-自定义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
 



















