背景
在本地开发以及和前端联调时没有问题,但是项目发布了就出现各种问题,很让人费解,而线上环境的日志信息又不足或没有,无法及时定位问题,所以这里就介绍本地开发工具联调线上环境的方法.
这里是使用idea和线上是docker容器部署springboot项目的环境(非docker环境直接使用指定端口)
1. 打开idea
2. 启动docker
注意这里需要映射的第一步指定的端口,idea是连接的宿主机(服务器)端口,在通过映射给docker的服务 (后续会分析一篇从零学习的docker文档)
3. 带参数启动项目 Java- jar
4. Idea启动连接
5. 线上测试
总结:缺点,若启动时没有预留这样的联调端口,则需要把服务器停止后在按上述启动才行,有没有不停止就可以联调的方法呢?
有.这里介绍
Arthas
Arthas是阿里巴巴开源出来的一个针对java的工具,主要是针对java的问题进行诊断。官网地址(下载安装请看这里):https://alibaba.github.io/arthas/index.html
1、启动Arthas
先找到需要排查的java进程(ps –ef|grep java //jps)
java -jar arthas-boot.jar XXX #进程的PID
2.定位到需要排查class的classLoader
(这里可能需要排除代码是否与本地一致)
jad *AuthorizeController (反编译字节码)
sc -d *DemoController | grep
classLoaderHash(获得classLoaderHash)
3.本地把代码修改后,编译成字节码文件,然后拷贝到服务器上
redefine-c [classLoaderHash] /opt/DemoController.class
热更新成功
总结:
函数参数格式不能修改,只能修改函数内部的逻辑
不能增加类的函数或变量
函数必须能够退出,如果有函数在死循环中,无法执行更新类
综上所述:
第一种需要重启,且影响线上的请求,但是操作及其灵活
第二章不需要重启,更适合运行的服务,但是操作的空间比较小