文章目录
- 前言&需求描述
- 1. 宝塔部署后端项目
- 1.1 项目准备
- 1.2 服务器准备
- 1.3 项目启动
- 2. IDEA 远程 debug
- 2.1 IDEA 编辑启动项
- 2.2 服务器带参启动
- 2.3 debug 演示
- 3. 补充与总结
- 3.1 补充
- 3.2 总结
宝塔部署项目 与 IDEA 远程debug 实战
前言&需求描述
本文记录个人工作中遇到的一个需求与解决方案,希望能帮助到有类似需求的读者。
需求描述
公司某块业务需要接收来自第三方API的请求。但是整个业务相对比较复杂,第三方API的一些特性还需要进一步测试,因此需要在不动现有业务代码的情况下,抽时间对这块业务进行预研。包括:触发第三方API请求的方法,第三方API请求的结构。
条件限制:
- 时间,需要在既定的较短时间内完成预研并有所产出
- 现阶段难以借用公司代码进行调试,即便切了本地分支,也无法通过本地地址接收来自第三方API的请求。
- 资源比较紧缺,暂时无法借用公司服务器资源单独部署一个专门用于预研的分支,现阶段也没这个必要。
于是,第一时间我的构想是:
解决思路构想
- 快速搭建一个后端项目,快速部署到服务器
- 通过远程debug的方式,验证第三方API调用
根据上述解决思路,想着以最快最方便的方式搭建好并部署,采用图形化的宝塔面板部署;IDEA 远程debug, 因此本文学习目标如下:
学习目标
- 学习宝塔部署后端项目
- 学习远程debug
1. 宝塔部署后端项目
1.1 项目准备
快速创建一个Maven项目,并引入所需依赖,配置跨域,本地测试启动成功即可。
其中,所需依赖、部分代码:
主要依赖 fast-json ,用于快速测试接收第三方API的请求与返回结果
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
@Controller
@CrossOrigin(origins = "*", maxAge = 3600)
public class BasicController {
@PostMapping("/api/accept")
public Object handleExternalRequest(@RequestBody String requestData) {
String response = "请求已接收:" + requestData;
System.out.println(response);
return JSON.parse(response);
}
}
然后就是项目打包。借助 IDEA 工具,如截图所示:
1.2 服务器准备
我们首先要准备一个服务器,并事先安装好宝塔面板。现在一般的云服务器都提供初始的宝塔面板安装,本文这里就不赘述。
有了宝塔之后,在宝塔面板上传我们打包好的项目文件。目录随意,但咱最好稍微记一下,呆会会用到:
1.3 项目启动
我们可以使用宝塔面板提供的项目管理启动 Java 项目,图形化界面非常方便,也可以在终端使用命令行。
赶时间,我借宝塔把文件上传上去之后,用终端启动项目:
java -jar [jar_name]
这里jar_name
是咱们的jar包名了
启动完成就可以关掉了,我们接下来要使用的是IDEA 远程debug, 要添加参数。
2. IDEA 远程 debug
2.1 IDEA 编辑启动项
如图所示,在我们平时点击 IDEA 启动/debug 的位置找到edit, 即Run/Debug Configurations ,进入,参考如下截图配置:
将生成的参数CV 下来,例如我这里是:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,
address=5005
2.2 服务器带参启动
服务器带参启动之前,先确保服务器防火墙开放了这个端口,例如我这里是 5005。 另外要十分注意的是,本地代码需要与远程一致。至少是需要 debug 的模块是一致的。
服务器键入如下命令启动
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar [jar_name]
如果不需要频繁修改代码重新上传的话,使用后台启动:
nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar [jar_name]
2.3 debug 演示
如图所示,成功进入断点:
3. 补充与总结
3.1 补充
本文是基于一个实际的需求记录的解决过程,采用的是远程debug的方式。但实际上,我们也可以反过来,将自己本地机器配置内网穿透,通过公网ip,接收来自第三方API的请求并在自己本地debug。这种方式舒服得多,但风险也是对等的,将自己甚至内网的IP桥接到公网并暴露了。
若遇到类似需求,读者酌情选用远程 Debug 与 内网穿透
3.2 总结
通过本文我个人遇到的需求,我们一起学习了:
- 宝塔面板上传文件,图形化操作部署 或者 命令行让Java 后端项目跑起来
- IDEA 远程 debug
希望本文有一定的参考价值,帮助到有类似需求的同学。