前言

最近在对接微信公众号消息推送的时候出现了一些问题需要调试,而我们配置消息推送使用的公网ip地址又是运营商专线网络,最后通过端口映射将公网端口映射到我们服务上部署的项目端口,所以调试起来非常麻烦,于是想到了远程调试来解决该问题。

准备工作

这里我创建了一个项目用于测试,实际使用时请替换成你需要远程调试的项目即可。下面提供主要的项目配置示例:

  1. RemoteController

    @RestController
    @RequestMapping("/remote")
    public class RemoteController {
    
        private final RemoteService remoteService;
    
        public RemoteController(RemoteService remoteService) {
            this.remoteService = remoteService;
        }
    
        @GetMapping("/test1")
        public String test1(@RequestParam("name") String name) {
            return remoteService.test1(name);
        }
    }
  2. RemoteServiceImpl

    @Service
    public class RemoteServiceImpl implements RemoteService {
    
        @Override
        public String test1(String name) {
            if (StringUtils.isEmpty(name)) {
                return "";
            }
    
            if (name.contains("z")) {
                return "张三";
            }
    
            if (name.contains("l")) {
                return "李四";
            }
            return name;
        }
    }
  3. application.yml

    server:
      port: 18808

远程调试配置

image-20231016154413857

image-20231016151051478

image-20231016151559595

  1. 选择需要修改的配置
  2. 自定义配置名称
  3. 关联远程JVM(保持默认即可)
  4. 通信协议(保持默认即可)
  5. IP地址
  6. 远程监听端口(建议不要与项目启动端口一致)
  7. JDK版本
  8. 远程服务器启动项目时的命令(建议提前复制下来保存)
  9. 需要启动的项目

注意不同版本的idea可能配置名称不一样,比如我这里是Remote JVM Debug,而有的版本是Remote

启动项目

如何打包SpringBoot项目和上传到服务器这里就不做过多介绍了,操作步骤如下:

  1. 项目打包

  2. 上传项目jar包到服务器

  3. 配置Java环境

  4. 启动jar包

    image-20231016153257187

  5. 本地启动远程调试

    image-20231016154631278

    image-20231016154720271

开始调试

我在项目test1方法中打了一个断点,然后浏览器访问192.168.79.100:18808/remote/test1?name=zs即可进行远程调试

image-20231016155026259

image-20231016155133007

注意事项如下:

1、这里我使用的ip是虚拟机设置的静态ip,如果你使用的是云服务器,请替换成云服务器的ip

2、如果使用的是云服务器,请在安全组放行上述两个端口:监听端口和项目运行端口

3、无论你使用的是什么服务器运行项目,请在防火墙放行上述两个端口或直接关闭防火墙(不建议)

参考资料

本文参考资料如下: