tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod
执行后,刷新下SpringBoot应用的url,这里刷新的是 http://192.168.1.40:2022/
刷新一下,arthas就会记录一条请求日志
可以获得这条记录的index是1000
根据 index为1000,继续下面的工作
用tt命令的-i参数来指定index,并且用-w参数来执行ognl表达式来获取spring context
tt -i 1000 -w 'target.getApplicationContext()'
输出一大串结果,这里看到beanFactory其实就已经知道了,我们已经获取了所有的bean
由此可见,使用Arthas获取到SpringContext真的方便很多。
除此之外,我们还可以使用Arthas进行代码热更新:
访问本地启动的一个服务,结果如下,下面通过热更新,在启动成功
汉字后面增加Arthas
相关文字:
进入到相应的java进程,这里进入选择3
jad --source-only com.upupor.app.controller.IndexController > /tmp/IndexController.java
vim /tmp/IndexController.java
package com.upupor.app.controller;
import com.upupor.framework.CcConstant;
import com.upupor.framework.CcResponse;
import com.upupor.framework.utils.SpringContextUtils;
import com.upupor.service.BannerService;
import io.swagger.annotations.Api;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class IndexController {
@GetMapping(value={"/"})
public CcResponse index() {
String version = SpringContextUtils.getProperty("application.version");
CcResponse ccResponse = new CcResponse();
ccResponse.setData(version);
// 修改的地方!!在 启动成功 后面添加 Arthas
ccResponse.setMessage("upupor启动成功Arthas");
return ccResponse;
}
}
IndexController
找出ClassLoader可以获得classLoader 是 ?764c12b6
使用mc(Memory Compiler)命令来编译,并且通过
-c
参数指定ClassLoader
mc -c 764c12b6 /tmp/IndexController.java -d /tmp
输出结果
/tmp/com/kuaiban/app/controller/IndexController.class 是 上一步 mc 输出的结果
更多使用案例可以访问:
https://github.com/alibaba/arthas/issues?q=label%3Auser-case+
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。