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

前言

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

Maven管理多模块项目

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

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

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。现在就可以在浏览器中访问你部署好的项目了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14485.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D建模软件、Creo 3D 、Creo8安装、下载教程

PTC Creo 8.0 是一款三维 CAD 软件&#xff0c;适用于多个行业和应用场景&#xff0c;包括机械设计、工业设计、电子设计等等。以下是 PTC Creo 8.0 的功能介绍和安装条件&#xff1a; 功能介绍&#xff1a; 三维建模&#xff1a;可以使用多种工具进行三维建模&#xff0c;包…

ModaHub魔搭社区:RESTful API 的方式访问全球领先的向量数据库Milvus

目录 Insert CreateIndex and Load Search or Query 作为全球领先的开源向量数据库,Milvus 一直致力于满足不同用户的场景和需求,聆听社区的声音。 最近, 我们发现,很多用户的数据中 常常包含各种不确定类型的数据,也有用户提出希望以 RESTful API 的方式访问 Milvus。…

Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘

Python 有趣的模块之pynupt ——通过pynput控制鼠标和键盘 文章目录 Python 有趣的模块之pynupt ——通过pynput控制鼠标和键盘1️⃣简介2️⃣鼠标控制与移动3️⃣键盘控制与输入4️⃣结语&#x1f4e2; 1️⃣简介 &#x1f680;&#x1f680;&#x1f680;学会控制鼠标和键盘是…

基于Unity2017版本的2D3D Infinite Runner Engine 1.5.1二维三维跑酷游戏模板

基于Unity2017版本的2D3D Infinite Runner Engine 1.5.1二维三维跑酷游戏模板 有多种游戏模式 还有个竖屏的玩法 工程地址&#xff1a;https://download.csdn.net/download/Highning0007/88020755

axure可视化大屏模板200例 •axure模板 大屏可视化 •axure数据可视化原型 •axure可视化组件 •axure

可视化axure原型可视化大屏模板200例&#xff0c;带动画效果&#xff0c;可直接复用 axure可视化大屏模板200例 axure可视化大屏模板200例数据可视化原型可视化组件下载—无极低码 axure模板 大屏可视化axure数据可视化原型axure可视化组件axure原型演示axure绘制界面原型图…

IDEA中配置Java反编译工具javap -c

IDEA中配置Java反编译工具javap -c 一、前置条件二、新建外部工具三、使用方式 欢迎访问我的个人博客&#xff1a;https://wk-blog.vip 一、前置条件 确保 IDEA 已经开启了编译 javac 。默认 IDEA 是开启的。 二、新建外部工具 首先进入 Settings ---> Tools ---> Ext…

基于“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用

查看原文>>>基于“SRP模型”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用 本文集成云端、桌面端等环境&#xff0c;结合遥感云计算、GIS空间分析&#xff0c;R语言统计分析的优势&#xff0c;以分析生态环境脆弱性…

Spring MVC教程

Spring MVC属于SpringFrameWork的后续产品&#xff0c;已经融合在Spring Web Flow里面。 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。 使用 Spring 可插入的 MVC 架构&#xff0c;从而在使用Spring进行WEB开发时&#xff0c;可以选择使用Spring的Spring MVC框架或集…

【C语言】你知道浮点数是怎么存储的吗?

前言 &#x1f388;大家好&#xff0c;我是何小侠&#x1f388; &#x1f343;大家可以叫我小何或者小侠&#x1f343; &#x1f490;希望能通过写博客加深自己对于学习内容的理解&#x1f490; &#x1f338;也能帮助更多人理解和学习&#x1f338; 积学以储宝&#xff0c;酌…

1.Git使用技巧-基础原理

Git 使用技巧 文章目录 Git 使用技巧前言一、Git 安装二、搭建服务端仓库三、搭建客户端1. git 通信2. git支持的通信协议本地拉取代码3. 配置用户名和密码查看配置 查看git 帮助Git 工作流程总结参考 前言 Git 是一个开源的分布式代码版本控制系统&#xff0c;用于敏捷高效地…

springboot---定时任务实现

定时任务 1. scheduled注解实现1.1. 用法1.2. 参数详解1.2.1. cron1.2.2. zone1.2.3. fixedDelay1.2.4. fixedDelayString1.2.5. fixedRate1.2.6. fixedRateString1.2.7. initialDelay1.2.8. initialDelayString 1.3. 示例 1. scheduled注解实现 1.1. 用法 任意类中创建一个方…

vue 目录

vue学习资源 vue.js中文官网&#xff1a; http://cn.vuejs.org/ vue.js源码&#xff1a; https://github.com/vuejs/vue vue.js官方工具&#xff1a; https://github.com/vuejs vue.js英文官网&#xff1a; https://vuejs.org/ vue全家桶 介绍 介绍 【 Vue全家桶 Vue&#xff…