SpringBoot项目多模块打包部署Docker实战

这篇具有很好参考价值的文章主要介绍了SpringBoot项目多模块打包部署Docker实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

我们好多程序员都只关注功能代码的编写,在一些运维工作上则显得略有不足。这篇文章通过介绍最常见的Maven管理的Spring Boot项目多模块打包部署Docker来介绍一下项目部署过程中操作流程和几个需要注意的点。文章假设读者有前面提到的技术点的前置知识,不过没有也没关系,所涉及到的点都比较简单。

Maven管理多模块项目

在项目过大后都会对项目通过多模块的方式进行拆分,下面来说一下拆分多模块的操作步骤。

首先看一下现在的目录结构。注意现在的项目是使用gradle进行构建的,随后我会把它转为使用maven构建。:
SpringBoot项目多模块打包部署Docker实战,spring boot,docker,maven
接下来我们使项目变成父子模块的结构。首先我们新建一个module,命名为demo-web。该模块用来存放web相关功能的代码:
SpringBoot项目多模块打包部署Docker实战,spring boot,docker,maven
SpringBoot项目多模块打包部署Docker实战,spring boot,docker,maven
现在的机构变成了这样:
SpringBoot项目多模块打包部署Docker实战,spring boot,docker,maven
接下来以类似的方式进行整理,整理过后的项目结构是下面这样的。来介绍一下各个模块的功能:common用于存放公共的方法,可以是各种工具类的集合。main模块放spring boot的启动类和一些configure,比如我们将common模块中的普通对象声明为bean。service存放了我们的service层代码。web模块中主要是controller。
SpringBoot项目多模块打包部署Docker实战,spring boot,docker,maven

pom文件

接下来看各个模块的pom文件是如何配置的,以及它们各自的作用。

这是父模块的pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>demo</name>
    <description>demo</description>
    <modules>
        <module>demo-web</module>
        <module>demo-common</module>
        <module>demo-service</module>
        <module>demo-main</module>
    </modules>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

其中modules标签内的内容是我们的各个子模块。由于这个demo项目是使用Spring Initializr自动生成的,它给出的是parent是Spring Boot Starter,这一块暂时先不要改动。build标签里使用了spring boot的maven插件,这个插件会在我们使用maven打包时打包成一个jar包,一个jar包运行也是spring boot的精髓所在。也就是说,使用spring boot maven plugin打好的jar包,只需要一个命令java -jar yourjar.jar就可以运行了。

我们再梳理一遍各个模块之间的关系:common是各个模块所依赖的工具模块,它里边的实现可以不依赖spring,因此不需要使用上面的打包工具,也不用依赖于父模块来获得父级依赖(主要是spring)。service模块是服务层代码所在的模块,需要依赖父模块以继承spring的依赖。web模块存放的是controller相关的实现,当然也需要依赖父模块,由于需要使用服务层代码,当然也需要依赖service模块。main模块是spring boot启动类所在的模块,前面提到的打成一个jar包实际上就是去jar里寻找这个启动类。再由启动类带动其余的service模块、web模块运行。因此main块还需要依赖serviceweb模块。

除此之外,还需要注意的一个点是,由于我们让serviceweb继承了父模块,因此也会继承了父模块的打包组件spring boot maven plugin,在打包时也会把这两个模块打成spring boot格式的jar包,而这种格式需要有一个主类作为入口(就是我们的spring boot启动类),但是我们这两个都是服务模块并没有啊。因此还需要在打包的时候做一些调整,使用下面的build标签来跳过打可执行jar包的步骤,让这两个模块打出来的是普通的jar包。

	<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            	<configuration>
            		<skip>ture</skip>
            	</configuration>
            </plugin>
        </plugins>
    </build>

Docker部署

在部署之前确保你有docker环境,这里就不再赘述了。我们的想法是使用docker file制作一个镜像,然后在镜像中运行我们的自己的多模块项目。前边提到,只需要将main模块打好的jar包使用java -jar命令执行一下就能启动了。因此把这个打好的jar包放到镜像里就可以了。西面是docker file的编写:

# 使用基础的Java镜像
FROM openjdk:latest

# 将构建好的Spring Boot JAR文件复制到容器中
COPY demo-main/target/demo-main-0.0.1-SNAPSHOT.jar /usr/src/myapp/app.jar

# 设置工作目录
WORKDIR /usr/src/myapp

# 暴露 Spring Boot 应用程序的端口
EXPOSE 8080

# 运行 Spring Boot 应用程序
CMD ["java", "-jar", "app.jar"]

写完docker file后运行下面命令来制作镜像:sudo docker build -t demoApp . 不要忘记最后有个.

镜像制作好后使用下面命令来后台启动容器并将端口映射为8080:sudo docker -d demoApp -p 8080:8080。现在就可以在浏览器中访问你部署好的项目了。文章来源地址https://www.toymoban.com/news/detail-541959.html

到了这里,关于SpringBoot项目多模块打包部署Docker实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot多模块项目打包

    例如有一个父项目,其中有三个模块,blog-api模块,blog-admin模块,blog-framework模块, 其中blog-api模块用于博客程序,blog-admin模块用与后台管理,blog-framework为公共模块   父项目pom.xml文件 1.对子模块进行引入,并且配置打包方式为pom  2.使用maven方式打包  子模块​pom.xml 设置打

    2024年02月13日
    浏览(34)
  • Spring Boot多模块项目打包

    例如父项目 build_test 下面有三个子模块,一个是common模块 一个是a模块,一个b模块;其中common是公共模块,a和b都依赖于公共模块common,我现在想把a和b模块打包成jar包。 创建父工程 创建3个子模块,分别是common和a和b模块 鼠标右击红框位置 选New 再选Module,鼠标左键点一下, 同

    2024年02月09日
    浏览(40)
  • 关于打包多模块SpringBoot项目并通过宝塔上传服务器

    打包 —— 如何打包多模块项目,参考b站up主:[喜欢编程的代先生] 的视频 总结:1. 对着视频里看一下父模块和各个子模块pom.xml文件关于打包工具的依赖是否正确。2. 从最底层开始打包,逐层向上,最后再合并打包。 部署 —— 打包好后,先把jar包上传到文件夹 运用java项目

    2024年02月11日
    浏览(32)
  • Docker实战笔记 二 Springboot Idea 插件打包

    1.上传springboot的jar 2.编辑Dockerfile 3.制作Docker镜像 4.查看并启动容器 5.启动容器 6.调用服务接口http://ip:9666/login 查看日志 已打印登录信息,启动成功完成。 首先把docker服务的远程端口打开 其他扩展知识 docker-compose https://blog.csdn.net/renfng/article/details/128974138 Docker实战笔记 三 D

    2024年02月04日
    浏览(33)
  • Docker打包及部署项目

    Docker 是一个开源的容器化平台,用于构建、部署和运行应用程序。它使开发人员能够将软件及其所有依赖项打包到一个称为容器的标准单元中。这个容器可以在任何支持 Docker 的环境中运行,无论是开发人员的个人计算机、测试环境还是生产服务器。 通过使用 Docker,开发人

    2024年02月13日
    浏览(28)
  • SpringBoot项目打包Docker镜像

    1、创建springboot项目,并在根目录新建Dockerfile文件 Dockerfile文件内容  进到项目根目录打包  构建镜像(不要忽略最后的一个点) 查看镜像列表 启动

    2024年02月16日
    浏览(38)
  • 【springboot开发】项目打包、发布和部署

    前言:可以打包成JAR包独立运行,也可以打包成WAR包部署到Tomcat容器中,若涉及到大规模部署,Jenkins成为最佳选择之一。本文主要介绍Maven项目的打包、发布和部署。 Maven默认会打包jar包,也可以在pom.xml中指定打包方法: 主要是最后一行。 然后在项目根目录下的控制台执行

    2024年02月09日
    浏览(40)
  • Dockerfile中编译、打包、部署spring boot项目

            Dockerfile是自动构建docker镜像的配置文件,将镜像构建过程通过指令的方式定义在Dockerfile中。配合docker build命令行可以实现自动化的Docker镜像的构建。         我们在学习一门语言或文档语法的时候,最快的学习方式就是看别人是怎么写的。这里这个“「别人

    2024年02月09日
    浏览(35)
  • Spring3新特性:Graalvm打包Springboot+Mybatis;Graalvm打包成Docker

    项目源代码 https://github.com/cmdch2017/SpringNative_Graalvm_Mybatis 安装graalvm与配置环境 首先安装步骤参考这篇博客 https://blog.csdn.net/weixin_38943666/article/details/129505945 其次如何处理反射 https://blog.csdn.net/qq_32740973/article/details/131799510 第一步,直接拷贝我项目中的config文件夹到你的项目 第

    2024年01月19日
    浏览(40)
  • SpringBoot项目如何打包成docker镜像?

    将Spring Boot项目打包成Docker镜像的过程可以分为以下几个步骤: 1. 创建Dockerfile 首先,你需要在Spring Boot项目的根目录下创建一个 Dockerfile 。这个文件包含了Docker镜像构建的所有指令。一个基本的 Dockerfile 可能看起来像这样: 确保替换 my-spring-boot-app-1.0.0.jar 为你的Spring Boot应用

    2024年02月21日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包