使用 Docker Compose 运行和调试 Spring Boot 应用程序
您可以使用 IntelliJ IDEA 在多个 Docker 容器下通过 Docker Compose 运行和调试一个 Spring Boot 应用程序。 本教程介绍如何在同一个虚拟网络中的容器内运行两个 Docker Compose 服务:一个简单的 Spring Boot 应用程序和一个 MySQL 数据库。 该应用程序可以接收向数据库添加条目的 GET 请求。 本教程还描述了如何设置断点并调试您的应用程序。
有关 Spring 相关功能,请参阅 在 IntelliJ IDEA 中启用 Spring 支持。
克隆示例项目
该应用程序的源代码托管在 GitHub 上 https://github.com/IdeaUJetBrains/SpringBootDockerDemoDebug。
在主菜单中,前往 。
指定存储库的 URL,然后点击 克隆。
如有需要,请同意在新窗口中打开克隆的项目。

准备 Spring Boot 运行配置
项目应该具有 DemoApplication 配置,以运行 Spring Boot 应用程序。 默认情况下,它在本地运行, 但您需要在 Docker Compose java 服务的容器上运行它。
在主菜单中,前往 。
在 运行/调试配置 对话框中,选择 DemoApplication 配置,展开 运行于 列表,并在 创建新目标 下选择 Docker Compose。

选择 docker-compose.yml 文件,然后选择
java服务,并点击 下一个。
在 IntelliJ IDEA 构建目标镜像并检测到 Java home 路径后,点击 下一个。
请检查检测到的 Java home 路径和版本,然后点击 创建(C)。
确保选择新的
java服务运行目标,并将更改应用到 DemoApplication 配置。
您可以从 Dockerfile 或镜像配置运行目标,但在本教程中,我们使用 Docker Compose 在同一网络中运行两个服务,以便一个服务中的 Java 应用程序可以访问另一个服务中的数据库。
准备数据库运行配置
您需要运行应用程序的数据库,使用定义在相同 docker-compose.yml 文件中的 数据库},{ 服务。 为其创建一个运行配置,然后配置在 Spring Boot 应用程序之前运行。
在 运行/调试配置 对话框中,点击 添加新配置
并选择 Docker Compose。
为此配置指定一个像
DatabaseService这样的描述性名称,指定 docker-compose.yml 文件,然后添加数据库},{服务。
应用更改到新配置并选择 DemoApplication 配置。
在 DemoApplication 配置中,点击 修改选项(M) ,选择 添加启动前任务 ,然后点击 运行另一个配置 ,并添加新的 Docker Compose 配置以在主应用程序之前运行数据库服务。

在您应用更改后,运行 DemoApplication 配置。
运行应用程序
当您运行 DemoApplication 配置时,IntelliJ IDEA 将首先启动 数据库},{ Docker Compose 服务并确保数据库状态良好。 然后它将启动 java 服务作为 Spring Boot 应用程序的运行目标。 最后,它将使用运行目标中的 Java 运行时来运行 Spring Boot 应用程序。 如果一切正常,您将看到以下输出:

请注意 Docker 转发到运行应用程序的容器中 8080 端口的随机本地端口号。 在上述示例中,它是 54123。
您可以访问应用程序并列出存储在数据库中的实体,网址为 http://localhost:54123/entitybus (请将端口号替换为 Docker 为您分配的实际端口号)。
要向数据库添加随机实体,请向 http://localhost:54123/entitybus/post 发送 GET 请求。

连接到数据库
如果您愿意,您可以连接到正在运行的数据库 jdbc:mysql://0.0.0.0:13306/DOCKERDB 。
打开 Database工具窗口,并使用以下设置添加 MySQL 数据源:
- 主机
localhost- 端口
13306- 用户
root- 密码
root- 数据库
DOCKERDB

调试应用程序
在调试模式下运行 DemoApplication。 例如,在选择运行配置后,点击主工具栏中的 调试 按钮
。
打开 EntitybusController.java 文件并在
postEntity()方法内部的某处设置一个断点。 例如,在第 27 行。请在浏览器中打开 http://localhost:54123/entitybus/post (或 Docker 分配给您的端口)。
调试器应在断点处暂停执行,您可以检查当前状态,例如变量值和帧。
