Spring Boot + Maven + Docker + IntelliJ 的开发流程

a4d*_*v92 5 java intellij-idea maven docker docker-compose

我想就标题中提到的堆栈应用程序的开发工作流程寻求一些建议。在我改用 Docker 之前,我所要做的就是:

  1. 前往 start.spring.io 并下载项目启动器
  2. 将其导入到intelliJ中
  3. 开发功能,点击绿色箭头启动应用程序或点击红色方块停止并在代码的每次更改时重复此操作

现在,当我切换到 docker 时,在第 2 步之后,我执行以下操作:

  1. 创建 Dockerfile 和 docker-compose.yml(我在其中启动我的应用程序和 mysql 服务)。
  2. 右键单击 docker-compose 并点击运行。然后它构建我的应用程序映像(我在运行配置中使用 --build 标志,因此每次我在 docker-compose 上运行时它都会构建映像)并启动两个服务:app 和 mysql,一切正常。

问题是当我在代码中更改某些内容时,我必须:

  1. 手动执行 mvn clean 和 install 步骤,在 /target 文件夹下生成新的 jar
  2. 然后停止之前的 docker compose 并再次运行它。然后它根据 /target 中的内容构建新图像

我宁愿有像一键解决方案之类的东西,就像我开始使用 docker 之前一样。因此,当我更改代码时,我只需按一个按钮,就会生成新图像并在应用所有更改的情况下运行。是否可以?我错过了什么吗?您能告诉我您的工作流程是否与我的相似?也许您可以推荐一些工具或不同的配置?

Kim*_*m T 5

您可以设置 Spring Boot 开发工具以在 Docker 容器内实时重新加载。

确保 spring-boot-devtools 依赖项位于您的 pom.xml 中:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <scope>runtime</scope>
  <optional>true</optional>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后创建一个 docker-compose.yml 文件

version: '3.1'
services:
  backend:
    image: maven:3.6.3-jdk-8
    command: mvn spring-boot:run
    ports:
      - 8000:8000
    volumes:
      - .:/usr/src/mymaven:rw
    working_dir: /usr/src/mymaven
Run Code Online (Sandbox Code Playgroud)

这使用Maven Docker 映像,因此当您运行时docker-compose up,它将运行该映像并将源代码文件夹映射为卷。然后 Maven 将使用以下命令运行应用程序mvn spring-boot:run

每当您对源代码进行更改时,它将重新加载,并具有与mvn spring-boot:run.