一、需求
线上有一个如下一个接口。因业务需要,不能停机,修改接口返回为全部大写+时间戳;
http://192.168.1.4:5656/hi
@RestController public class HelloController { @GetMapping("/hi") public String getMessage(String msg) { return msg.toLowerCase()+System.currentTimeMillis(); } }
二、动态替换jvm加载类
1、修改代码
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { public HelloController() { } @GetMapping({"/hi"}) public String getMessage(String msg) { return msg.toUpperCase() + System.currentTimeMillis(); } }
2、编译为class文件
3、上传至服务指定目录
4、使用 Arthas替换
启动arthas,选择替换项目,执行
retransform /usr/local/jar/HelloController.class
5、测试