beanshell 线上修复BUG

有时服务器上线了 但是有些代码因为程序原因可能导致没有执行 需要主动调用执行下 或者为了排查线上问题 主动获取某个方法或者变量的返回值 可以使用脚本来做线上的修复处理
javascript 也是可以的 但是编写脚本 有些时候总有字段类型转换的问题
beanshell是java脚本 写起来方便很多
不过 使用这些脚本修复的一个基础是要有一个容器存放所有的对象 如果使用了spring的话就不用考虑了

ScriptEngineManager manager = new ScriptEngineManager();
        engine = manager.getEngineByName("js");
        ApplicationContext context = GameServerContext.getAppContext();
        for (String beanName : context.getBeanDefinitionNames()) {
            manager.put(beanName, context.getBean(beanName));
            try {
                interpreter.set(beanName, context.getBean(beanName));
            } catch (Exception e) {
                throw new ServiceException(e);
            }
        }
        //让所有的非public方法和字段可供调用
        try {
            Capabilities.setAccessibility(true);
        } catch (Unavailable e) {
            throw new ServiceException(e);
        }
先把对象都放到对应的对象里面去 这样后面写的脚本才能获取到对应的对象
Interpreter是 beanshell里的一个类  执行方法调用的时候 可能有些方法是private  或者 protected的  所以需要提前设置下 方便脚本调用 Capabilities.setAccessibility(true);
声明下代码不是我写的
.----.
             _.'__    `. 
         .--(#)(##)---/#\
       .' @          /###\
       :         ,   #####
        `-..__.-' _.-\###/  
              `;_:    `"'
            .'"""""`. 
           /,  LOL ,\
          //  很穷!  \\
          `-._______.-'
          ___`. | .'___ 
         (______|______)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值