当前位置 博文首页 > ATTyzj的博客:Idea调试远程Tomcat的代码

    ATTyzj的博客:Idea调试远程Tomcat的代码

    作者:[db:作者] 时间:2021-09-21 09:12

    现在越来越多的项目是以前后端分离的方式进行开发,SO这两天我也玩了玩分离式开发。

    前后端分离,就需要后端服务器提供一整套API共前端人员调用。那么在开发阶段,双方都需要调试,如果将后端API部署在本地的话,后端人员调试很方便,但是前端人员需要怎么访问我本地的API呢?之前公司的老项目真的很low,他们解决这个问题是通过日志,把所有的API请求的详细信息、请求参数、错误信息全部都以log的方式输出到日志文件里面。然后把项目部署到服务器上,前端调用的时候,一旦有了问题就去看日志,从日志里分析是哪里出了错,然后再改bug。每改一次bug,就重新部署一遍。本人真的忍受不了这么低效的工作方式,真不知道那些老员工是怎么过来的。

    好了言归正传,那么有没有既能让远在天涯的前端人员调用我们的API,后端人员还可以随时的debug呢?那肯定是有了,笔者想到方式有两种:一种是让自己的电脑可以让外网访问到,但是这种方式需要配置路由,或者动态域名什么的,都很繁琐。所以我没有采取这种方式。第二种呢就是把项目部署到服务器上,idea直接debug服务器上都代码。这种方式显然可行,于是笔者开始动手。

    这过程比较曲折,遇到了很多坑。由于我用的是Tomcat服务器,所以我想着在idea上部署一个远程的Tomcat就行了,于是我百度了几篇文章,挑了两篇好一点的,在这里给大家列出来:

    https://blog.csdn.net/tianjun2012/article/details/52795202

    https://blog.csdn.net/yirentianran/article/details/79175232

    笔者照着文章上面的一步一步配置,但到最后就是不好使。详细过程就不再赘述了,修改了tomcat的catalina.sh 脚本,如下

    ?

    export CATALINA_OPTS="-Dcom.sun.management.jmxremote 
    -Dcom.sun.management.jmxremote.port=1099 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=false 
    -Djava.rmi.server.hostname=47.94.153.250"
    
    export JAVA_OPTS="-Dcom.sun.management.jmxremote=
    -Dcom.sun.management.jmxremote.port=1099
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false"

    idea的配置:

    然后服务器的端口也都开放了。?但是配置完了,运行报错

    说是我的连接超时,然后我就各种ping,都是可以通的,而且端口的监听也可以在服务器上查到。这时笔者就很郁闷了,为什么会连接超时呢?百度了半天也没有找到解决方案。无奈我只好去请教大神,在与大神的沟通过程中,大神说他用的不是这个idea的远程服务器,而是另一个。

    ?并给我了一片文章,哈哈?https://www.cnblogs.com/wy2325/p/5600232.html,于是我又照着配置了一遍。

    export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

    果然,服务器的tomcat和idea连接成功了(当然服务器需要先开放对应的端口)!

    笔者顿时高兴的一匹,毕竟搞了大半天,终于连接成功了。原以为万事大吉的我,没想到还差一步,不过我们已经向成功迈进了一大步了。就在我在postman中访问API,进行debug的时候,却发现服务器返回的是404,本地的idea也没有反应。奇怪,明明已经连上了,为什么访问不到?于是我上服务器看了一下,tomcat里面根本没有我的项目。这是为什么呢?我回来盯着idea中连接成功的这句话看了半天,突然想到,这只是连接成功了,但是他没有将我的代码打包部署到tomcat上,于是我将项目打包,部署到了远程的这个tomcat上,再次请求API,终于看到我想要的了!!!

    完美,至此我们的目的已经达到了,此时笔者也大致明白了,idea与远程的tomcat只是建立了一个scoket连接,监听远程tomcat上的请求,并不会将项目通过scoket部署到远程的tomcat,所以我们需要手动部署tomcat,idea监听请求从而debug服务器上的项目。

    在此感谢帮助我的大神啊!

    cs