远程调试及热部署
目的
远程调试:有时候本地调试满足不了需要,比如该服务引用了其他的服务,拿公有云说想要调试scan-service,因为他用到了ssk的服务,而我们本地起不了ssk或者说起来也没啥用,因此可以使用远程调试的方式帮助我们查找问题。
热部署:热部署是为了避免我们修改代码每次都需要重启服务带来的耗时,spring提供了自带的热部署方式,但是它的机制还是监听到有修改会重启服务,为了避免这个问题可以使用IDEA的插件 JRebel。
远程热部署:比如我们在测试环境通过调试找出了问题,但是每次去以传jar包的方式频繁的部署服务也很耗时,也可以使用JRebel进行远程代码的热部署。
本服务链路调用查看:有时候一个请求可能会涉及很多操作,我们可以通过JrebelX 查看这个请求调用的所有链路(本方法,不包含服务之间调用的链路)。
貌似这些都依赖于java的agent机制,感兴趣的可以研究研究。
注意:开发环境玩玩得了。
远程调试
现在我们把包传到服务器上看一看效果
启动命令
nohup java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:10023 ./learn-debug-1.0.0.jar &
本地热部署
使用JRebel插件
IDEA里设置更新按钮的操作:更新classes文件和resources
刷新前
修改代码不重启服务,点刷新后
远程热部署
插件下载地址:https://www.jrebel.com/products/jrebel/download/prev-releases
生成UUID : https://www.uuidgenerator.net/
bash jrebel/bin/activate.sh http://激活地址/9d2e2710-a2de-47b9-80c6-1c8a9b4148eb email地址
java -jar jrebel/jrebel.jar -set-remote-password 12345321
nohup java -jar -agentpath:/home/app/jrebel-stabel/jrebel/lib/libjrebel64.so -Drebel.remoting_plugin=true ./learn-debug-1.0.0.jar &
方法链路查看
可以查看到这个方法具体的调用过程,以及数据库查询、es查询等等
自行搭建jrebel激活服务器
github: https://github.com/Byron4j/JrebelLicenseServerforJava
克隆下来打个包
根据readme.md 打个docker 镜像
Dockerfile
FROM java:8-jre-alpine
ENV PORT 8086
ADD target/JrebelBrainsLicenseServerforJava-1.0-SNAPSHOT-jar-with-dependencies.jar /JrebelBrains.jar
CMD java -jar /JrebelBrains.jar -p $PORT
docker run -d --name jrebel-ls --restart always -e PORT=8086 -p 8086:8086 jrebel-ls
这就成功了!