介绍

项目开发中不管是在本地,测试,生成环境中都避免不了bug的产生,有些比较棘手的问题还需要追踪代码才能一目了然。但问题是测试,生成环境我们怎么能像本地一样快速,轻松的追踪定位呢?

Java -jar 命令启动项目debug

这是最原始的SpringBoot项目部署方式,如果是以这样的方式部署项目。实现debug方式如下:

  1. 在命令中添加-Xdebug命令(java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=y -jar demo2-0.0.3-SNAPSHOT.jar);
  2. 窗口弹出:Listening for transport dt_socket at address: 5005在这里插入图片描述
  3. 可以尝试浏览器或者postman进行项目访问,检查是否成功部署;
  4. 配置本地IDEA;在这里插入图片描述
  5. 启动本地debug模式;
    在这里插入图片描述在这里插入图片描述
  6. 代码中标记断点可进行debug;

使用Docker容器部署项目debug

把项目部署在容器中是目前比较流行的一种方式。(这里为了方便测试效果使用本地项目+Docker, 测试,生成环境都是一样的套路)实现debug方式如下:

  1. 创建一个项目;
    在这里插入图片描述
  2. 编写Dockerfile文件 在src-main下面创建docker文件夹 在文件夹下面创建Dockerfile文件 进行编辑(注意文件名称一定要是:Dockerfile)在这里插入图片描述
  3. 文件内容:
FROM java:8
VOLUME /tmp
ADD demo-1.0.0-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8080
EXPOSE 5005
ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

(注意这里的-agentlib命令)
4. 编辑文件属性;在这里插入图片描述在这里插入图片描述
5. 点击运行;
在这里插入图片描述
如果出现jar包找不到的情况。解决办法有两种:
一:(亲测可用)
运行 mvn clean package命令
把target文件夹里面打好的项目包 移动到docker文件夹下面
在这里插入图片描述
然后再点击Dockerfile中运行:出现下面提示说明启动成功
在这里插入图片描述
二:(未测)
使用docker-maven-plugin插件,在pom.xml中配置插件

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <configuration>
        <imageName>${project.groupId}-${project.artifactId}</imageName>
        <dockerDirectory>src/main/docker</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

在这里插入图片描述
ternimal中运行 mvn clean package -DskipTests=true docker:build命令,打包项目并构建镜像,可以查看本地镜像中是否有新的镜像。如果产生镜像,点击镜像创建一个容器 跳转到容器配置窗口和编辑Dockerfile文件属性一样。

  1. 配置本地IDEA(如果项目已经在测试,生产环境中已经部署在容器中,直接配置该步骤即可);在这里插入图片描述
  2. 启动本地debug模式;
    在这里插入图片描述在这里插入图片描述

注意事项

如果出现容器中的项目连接数据库失败有可能是你的数据库还没有开放对外ip,设置一下即可。
在测试,生产环境中进行debug要与本地项目代码一致。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐