使用 Docker Compose 运行和调试 Spring Boot 应用程序
最后修改时间:2023 年 10 月 12 日您可以使用 IntelliJ IDEA 运行和调试在 Docker Compose 下的多个 Docker 容器中运行的Spring Boot应用程序。本教程介绍如何在同一虚拟网络中的容器内运行两个 Docker Compose 服务:一个简单的 Spring Boot 应用程序和一个 MySQL 数据库。应用程序可以接收向数据库添加条目的 GET 请求。本教程还介绍了如何设置断点和调试应用程序。
笔记
在开始之前,请安装并运行 Docker,启用 Docker 插件,并连接到 IntelliJ IDEA 中的 Docker 守护程序。有关更多信息,请参阅IntelliJ IDEA 中的 Docker 入门。
有关 Spring 的相关功能,请参阅在 IntelliJ IDEA 中启用 Spring 支持。
克隆示例项目
应用程序的源代码托管在 GitHub 上:https://github.com/IdeaUJetBrains/SpringBootDockerDemoDebug
转到文件| 新 | 来自版本控制的项目。
指定存储库的 URL 并单击“克隆”。
如有必要,同意在新窗口中打开克隆的项目。
准备 Spring Boot 运行配置
该项目应该具有DemoApplication配置,该配置运行 Spring Boot 应用程序。默认情况下,它在本地运行,但您需要通过 Docker Compose 服务在容器上运行它java
。
笔记
如果您没有DemoApplication配置,请打开DemoApplication.java文件并单击装订线。如果没有适当的 Java 运行时和所需的数据库,应用程序实际上不会运行,但这会自动为您创建DemoApplication配置。
从主菜单中,选择运行 | 编辑配置。
在“运行/调试配置”对话框中,选择DemoApplication配置,展开“运行于”列表,然后选择“创建新目标”下的“Docker Compose”。
选择docker-compose.yml文件,然后选择
java
服务,然后单击Next。IntelliJ IDEA 构建目标镜像并检测到 Java 主路径后,单击下一步。
检查检测到的 Java 主路径和版本,然后单击创建。
确保
java
选择新的服务运行目标并将更改应用于DemoApplication配置。
您可以从 Dockerfile 或映像配置运行目标,但在本教程中,我们使用 Docker Compose 在同一网络中运行两个服务,以便一个服务中的 Java 应用程序可以访问另一个服务中的数据库。
准备数据库运行配置
您需要从db
同一docker-compose.yml文件中定义的服务运行应用程序的数据库。为其创建一个运行配置,然后配置为在 Spring Boot 应用程序之前运行它。
在“运行/调试配置”对话框中,单击“添加新配置” 并选择“Docker Compose”。
为该配置指定一个描述性名称
DatabaseService
,例如 ,指定docker-compose.yml文件,然后添加db
服务。将更改应用到新配置并选择DemoApplication配置。
在DemoApplication配置中,单击“修改选项”,选择“在启动之前添加任务”,然后单击“运行另一个配置”,并添加新的 Docker Compose 配置以在主应用程序之前运行数据库服务。
应用更改后,运行DemoApplication配置。
运行应用程序
当您运行DemoApplication配置时,IntelliJ IDEA 将首先启动db
Docker Compose 服务并确保数据库运行状况良好。然后它将启动该java
服务作为 Spring Boot 应用程序的运行目标。最后,它将使用 Spring Boot 应用程序的运行目标中的 Java 运行时。如果一切正确,您应该看到以下输出:
请注意 Docker 转发到运行应用程序的容器中的端口 8080 的随机本地端口号。在上面的示例中,它是 54123。
您可以访问该应用程序并列出存储在http://localhost:54123/entitybus数据库中的实体(将端口号替换为 Docker 在您的情况下分配的端口号)。
要将随机实体添加到数据库,请将 GET 请求发送到http://localhost:54123/entitybus/post。
连接到数据库
如果需要,您可以连接到正在运行的数据库jdbc:mysql:
打开数据库工具窗口并使用以下设置添加 MySQL 数据源:
- 主持人
localhost
- 港口
13306
- 用户
root
- 密码
root
- 数据库
DOCKERDB
调试应用程序
在调试模式下运行DemoApplication 。例如,选择运行配置后,单击主工具栏中的“调试”按钮。
打开EntitybusController.java文件并在方法内的某处设置断点
postEntity()
。例如,第 27 行。在浏览器中打开http://localhost:54123/entitybus/post(或者 Docker 在您的情况下分配的任何端口)。
调试器应在断点处暂停执行,您可以检查当前状态,例如变量值和帧。
感谢您的反馈意见!