Java Spring Boot+的开发工作流程;Maven+;Docker&x2B;IntelliJ

Java Spring Boot+的开发工作流程;Maven+;Docker&x2B;IntelliJ,java,maven,docker,intellij-idea,docker-compose,Java,Maven,Docker,Intellij Idea,Docker Compose,我想问一些关于标题中提到的堆栈应用程序开发工作流的建议。在我改用Docker之前,我要做的就是: 转到start.spring.io并下载project starter 将其导入intelliJ 开发功能,点击绿色箭头启动应用程序,或点击红色方框停止并在每次代码更改时重复 现在,当我切换到docker时,在第2步之后,我会这样做: 创建Dockerfile和docker-compose.yml(我在这里启动我的应用程序和mysql服务) 右键单击docker compose并点击run。然后它构

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

  • 转到start.spring.io并下载project starter
  • 将其导入intelliJ
  • 开发功能,点击绿色箭头启动应用程序,或点击红色方框停止并在每次代码更改时重复
  • 现在,当我切换到docker时,在第2步之后,我会这样做:

  • 创建Dockerfile和docker-compose.yml(我在这里启动我的应用程序和mysql服务)
  • 右键单击docker compose并点击run。然后它构建我的应用程序映像(我在我的运行配置中使用--build标志,这样每次我点击docker compose上的run时它都会构建映像),并启动两个服务:应用程序和mysql,一切正常
  • 问题是,当我更改代码中的某个内容时,我必须:

  • 手动执行mvn清理和安装步骤,以在/target文件夹下生成新的jar
  • 然后停止前一个docker compose并再次运行它。然后,它从中/目标构建新图像
  • 我更喜欢一键式解决方案,就像我开始使用docker之前一样。所以,当我更改代码时,我只按下一个按钮,新图像就会生成,并在应用所有更改的情况下运行。可能吗?我错过什么了吗?你能告诉我你的工作流程和我的类似吗?也许你可以推荐一些工具或不同的配置

  • 创建一个单独的发布模块-projectnamelease-它将关闭旧映像,构建新映像并运行/发布它
  • 在配置中使用

  • 示例项目-

    您可以将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>
    
    当您运行
    docker compose up
    时,它将运行映像并将源代码文件夹映射为卷。然后maven将使用
    mvn spring boot:run


    每当您对源代码进行更改时,它都会重新加载,其功能与
    mvn spring boot:run

    相同。为什么不创建一个脚本呢?您不必执行
    mvn clean安装
    只要
    mvn clean package
    就足够了。问题是为什么要使用Docker?真的需要吗?只是在IDE中运行代码运行测试等?CI解决方案使用
    mvn clean deploy
    在我们的存储库管理器中发布工件(如果需要,我们可能会生成docker映像)…但我不会在本地这样做…极为罕见。。。
    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