前言
- 部分时候,程序在本地环境跑的很好,但是一到线上环境就各种出错,笔者除了看日志就没有什么比较好的方法了。无意之中发现了idea可以实现线上debug,这对笔者这种辣鸡程序员来说简直是福音呀!
- 此种方式可以实现war包远程部署并调试,jar包可以通过另一种方式实现,本文暂时不赘述,实在想要通过这种方式部署jar包,可以把jar包改成war包,方式一样可行;
- 该文章需要读者具备一定的linux基础;
- 笔者能力有限,有理解不足,失误的地方,请大家指正,谢谢。
环境准备
- linux服务器(本文采用某品牌旗下云主机)
- 安装tomcat(注意版本要与本地tomcat版本一致)
- idea 2018.3(低版本也可以,但是官方文档说只有Ultimate版本才支持这个功能)
- xshell(用于连接linux服务器并进行相应设置)
注意事项
- 因为是使用云主机,所以需要在对应云主机安全组上开放对应端口(本文中用到了8080,1099,5050端口);
- 远程部署之前最好clean掉上一次生成的文件;
- 笔者按照我的文章,难免会出现意外情况,可以在文章后提出,大家一起讨论,毕竟我也弄了几天才成功,期间问题不断;
实现步骤
-
idea中设置FTP(用于传输本地文件到指定linux主机文件夹中)
tools -> Delpoyment -> configuration
输入云主机IP地址,点击Test Connection 按钮,连接成功后进行下一步,其中root path在test成功之后点击Autodetect自动识别
在Mapping标签中将本地文件夹和linux服务器上部署的位置做一个映射(功能待确定)
-
idea编译设置
File -> project Structure ,新增Artifacts,用于后期部署。如果不能选择Archive中的from Modules,先新增Web Application: Exploded,然后新增web application: archive(笔者能力有限,这里应该有更加合理的方式,无奈笔者无法找出)
output directory:可以直接使用自动生成的地址,创建ManifestFile文件(点击create),然后选择指定的启动类。
-
idea Debug设置
接下来我们开始设置远程调试相关配置,其中将会设计到三个端口,也就是8080,1099,5050,我们将在本小节最后对该三个端口做出解释。
此时选择我们上一步生成的mytatis-xml:war包(这表示上传war包到服务器,war exploade表示上传war解压过后的文件,原本两种方式都可以,但是第二种不知道为何本地一直调试不通,所以采用了第一种。方式名称根据不同项目名不同,不必与笔者一模一样)
下图中的路径是自动生成的,不要改动,否则将会导致后面无法访问到接口
此时该图中路径也自动变更了,不需要人为修改
点击Debug,并且把port改为5050,然后复制中间箭头所指的一段代码 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5050 我们需要把该段代码写入tomcat的catalina.sh文件
端口解释:
8080:tomcat工作端口
1099:Jmx工作端口
5050:远程debug端口
-
云主机tomcat设置
编辑tomcat/bin/catalina.sh脚本,新增以下内容 CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5050 -Dcom.sun.management.jmxremote= -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=xx.xx.xx.xx" 其中第一句话与我们上面复制的有关,jmx相关端口设置为1099,hostname改为云主机实际的IP地址; 修改catalina.sh脚本之后,我们对应的启动命令为:./catalina.sh start;关闭命令为:./catalina.sh stops,而不是使用start.sh和shutdowan.sh 使用./catalina.sh start命令启动tomcat,如果之前已经启动了,请先关闭tomcat. cat tomcat/log/catalina.out日志应该有启动字样,如下图
使用lsof -i:8080/5050/1099端口应该都是被同一个程序占用监听
到这一步服务器端已经全部准备完毕!
-
idea远程部署
部署之前最好先清理生成文件。 然后点击debug,出现下午底部字样表示远程部署成功,此时在代码中下断点,就可以顺利的调试了。
不足之处
能顺利进入断点,但是线上会出现三个类似同名文件,笔者不知道造成该情况的原因,如果有大神知道,请告知,万分感谢。
参考资料
idea官方帮助文档:https://www.jetbrains.com/hel...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。