热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IDEA部署war包到远程tomcat并实现debug

前言部分时候,程序在本地环境跑的很好,但是一到线上环境就各种出错,笔者除了看日志就没有什么比较好的方法了。无意之中发现了idea可以实现线上debug,这对笔者这种辣鸡程序员来说简

前言

  1. 部分时候,程序在本地环境跑的很好,但是一到线上环境就各种出错,笔者除了看日志就没有什么比较好的方法了。无意之中发现了idea可以实现线上debug,这对笔者这种辣鸡程序员来说简直是福音呀!
  2. 此种方式可以实现war包远程部署并调试,jar包可以通过另一种方式实现,本文暂时不赘述,实在想要通过这种方式部署jar包,可以把jar包改成war包,方式一样可行;
  3. 该文章需要读者具备一定的linux基础;
  4. 笔者能力有限,有理解不足,失误的地方,请大家指正,谢谢。

环境准备

  1. linux服务器(本文采用某品牌旗下云主机)
  2. 安装tomcat(注意版本要与本地tomcat版本一致)
  3. idea 2018.3(低版本也可以,但是官方文档说只有Ultimate版本才支持这个功能)
  4. xshell(用于连接linux服务器并进行相应设置)

注意事项

  1. 因为是使用云主机,所以需要在对应云主机安全组上开放对应端口(本文中用到了8080,1099,5050端口);
  2. 远程部署之前最好clean掉上一次生成的文件;
  3. 笔者按照我的文章,难免会出现意外情况,可以在文章后提出,大家一起讨论,毕竟我也弄了几天才成功,期间问题不断;

实现步骤

  • idea中设置FTP(用于传输本地文件到指定linux主机文件夹中)

    tools -> Delpoyment -> configuration

    《IDEA部署war包到远程tomcat并实现debug》

    输入云主机IP地址,点击Test Connection 按钮,连接成功后进行下一步,其中root path在test成功之后点击Autodetect自动识别

    《IDEA部署war包到远程tomcat并实现debug》

    在Mapping标签中将本地文件夹和linux服务器上部署的位置做一个映射(功能待确定)

    《IDEA部署war包到远程tomcat并实现debug》

  • idea编译设置

    File -> project Structure ,新增Artifacts,用于后期部署。如果不能选择Archive中的from Modules,先新增Web Application: Exploded,然后新增web application: archive(笔者能力有限,这里应该有更加合理的方式,无奈笔者无法找出)

    《IDEA部署war包到远程tomcat并实现debug》

    output directory:可以直接使用自动生成的地址,创建ManifestFile文件(点击create),然后选择指定的启动类。

    《IDEA部署war包到远程tomcat并实现debug》

  • idea Debug设置

    接下来我们开始设置远程调试相关配置,其中将会设计到三个端口,也就是8080,1099,5050,我们将在本小节最后对该三个端口做出解释。

    《IDEA部署war包到远程tomcat并实现debug》

    此时选择我们上一步生成的mytatis-xml:war包(这表示上传war包到服务器,war exploade表示上传war解压过后的文件,原本两种方式都可以,但是第二种不知道为何本地一直调试不通,所以采用了第一种。方式名称根据不同项目名不同,不必与笔者一模一样)

    《IDEA部署war包到远程tomcat并实现debug》

    《IDEA部署war包到远程tomcat并实现debug》

    下图中的路径是自动生成的,不要改动,否则将会导致后面无法访问到接口

    《IDEA部署war包到远程tomcat并实现debug》

    此时该图中路径也自动变更了,不需要人为修改

    《IDEA部署war包到远程tomcat并实现debug》

    点击Debug,并且把port改为5050,然后复制中间箭头所指的一段代码
    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5050
    我们需要把该段代码写入tomcat的catalina.sh文件

《IDEA部署war包到远程tomcat并实现debug》

端口解释:
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日志应该有启动字样,如下图

    《IDEA部署war包到远程tomcat并实现debug》

    使用lsof -i:8080/5050/1099端口应该都是被同一个程序占用监听

    《IDEA部署war包到远程tomcat并实现debug》


    到这一步服务器端已经全部准备完毕!

  • idea远程部署

    部署之前最好先清理生成文件。
    然后点击debug,出现下午底部字样表示远程部署成功,此时在代码中下断点,就可以顺利的调试了。

    《IDEA部署war包到远程tomcat并实现debug》

不足之处

能顺利进入断点,但是线上会出现三个类似同名文件,笔者不知道造成该情况的原因,如果有大神知道,请告知,万分感谢。

《IDEA部署war包到远程tomcat并实现debug》

参考资料

idea官方帮助文档:https://www.jetbrains.com/hel…


推荐阅读
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • 本文档提供了首次周测的答案解析,涵盖特殊符号、命令作用、路径说明以及实战练习等内容。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • Hibernate全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架1)、基础概念DAO(DataAccessorOb ... [详细]
  • 在Android应用开发过程中,开发者经常遇到诸如CPU使用率过高、内存泄漏等问题。本文将介绍几种常用的命令及其应用场景,帮助开发者有效定位并解决问题。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • protobuf 使用心得:解析与编码陷阱
    本文记录了一次在广告系统中使用protobuf进行数据交换时遇到的问题及其解决过程。通过这次经历,我们将探讨protobuf的特性和编码机制,帮助开发者避免类似的陷阱。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • 在尝试启动Java应用服务器Tomcat时,遇到了org.apache.catalina.LifecycleException异常。本文详细记录了异常的具体表现形式,并提供了有效的解决方案。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
author-avatar
mobiledu2502883211
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有