SpringBoot 多模块项目打包部署保姆级教程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: SpringBoot 多模块项目打包部署保姆级教程

SpringBoot 多模块项目打包部署教程!

SpringBoot 多模块项目打包部署教程!

首先,使用docker安装环境配置(jdk安装不再展示)。

此次部署使用到的技术栈有redis以及mysql,技术不多,但也够吃一桌。

1、环境准备

# 1.安装docker
# 2.docker使用测试
# 3.使用docker安装Mysql
# 4.使用docker安装redis

1-1、安装docker(Vm或服务器)

#1.需要的安装包
yum install -y yum-utils
#2.设置 阿里云 镜像的仓库
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#3.更新yum软件包索引
yum makecache fast
#4.安装docker docker-ce 社区版  docker-ee 企业版
yum install docker-ce dokcer-ce-cli containerd.io
#5.启动docker
systemctl start docker
#6.查看docker 版本
docker version
#7.配置阿里云加速镜像
vim /etc/docker/daemon.json
# 7.1 添加如下内容,具体地址自己申请咯
# 创建文件夹
mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://****.mirror.aliyuncs.com"]
}
# 7.2重启服务
systemctl daemon-reload
systemctl restart docke

1-2、docker使用测试

拉取hello-world镜像 ( docker pull hello-world)

![](https://ucc.alicdn.com/images/user-upload-01/ef4844eab9b443ceb478c2b01540ebc6.png
当拉取成功说明docker环境已经安装成功!

1-3、使用docker安装Mysql

拉取Mysql镜像

docker pull mysql:8.0.16 ==> docker pull 镜像名称:镜像版本
在这里插入图片描述

docker images

查看所有镜像我们发现mysql已经拉取成功了!
在这里插入图片描述

启动并挂载镜像
-d: 后台运行容器,也可以使用镜像id
-p 将容器的端口映射到本机的端口
-v 将主机目录挂载到容器的目录
-e 设置参数  MYSQL_ROOT_PASSWORD 指定登录密码

 docker run -d --name mysql -p 3306:3306 -v /opt/containerd/mysql/conf:/etc/mysql/conf.d -v /opt/containerd/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.16

在这里插入图片描述

我们发现mysql容器已经启动成功!

进入容器内部查看
docker exec -it 88ea62512549 /bin/bash  ==> docker exec -it 容器id /bin/bash

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/4b70bf58b1c6474ab870559e426d417a.png

进入之后我们可以登陆mysql查看:
在这里插入图片描述
我们发现mysql已经可以正常登陆了。

退出容器内部但不停止容器运行

Ctrl+P+Q  退出容器内部但不停止容器运行
exit     退出容器内部并停止容器运行
最后我们使用 navicat 远程连接测试

我们找到我们服务器或者虚拟机的ip地址来连接我们的mysql,
如果使用的是mysql记得放行3306端口,关于如何放行这里不做赘述。
在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yuDclx4u-1631194979190)(../_resources/889d2b84bf9b423a826c5466916f843d.png)]
在这里插入图片描述
我们发现已经远程连接成功了。

有的小伙伴会问了,谁知道到底有没有成功,mysql都有这个几个数据库啊!

那我们直接在连接到的mysql中新加一个数据库看看docker容器中的mysql是否会出现这个表不就行了吗。

我在mysql中新建了一个blog数据库。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-we3T81sq-1631194979194)(../_resources/e34689ddec064e4fbe19a580d258e770.png)]
我们重新进入docker容器中,登陆MySQL查看。
在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ETqo9Z6f-1631194979197)(../_resources/ebf3c529cbdf4a178202de00f25eec28.png)]在这里插入图片描述
这下我们发现确实多了一个blog数据库,这就可以说明我们mysql服务已经成功了!

1-4、docker安装redis

拉取 redis镜像
[root@VM-8-3-centos /]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
a330b6cecb98: Pull complete 
14bfbab96d75: Pull complete 
8b3e2d14a955: Pull complete 
5da5e1b21a2f: Pull complete 
6af3a5ca4596: Pull complete 
4f9efe5b47a5: Pull complete 
Digest: sha256:e595e79c05c7690f50ef0136acc9d932d65d8b2ce7915d26a68ca3fb41a7db61
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
[root@VM-8-3-centos /]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
redis        latest    02c7f2054405   5 days ago    105MB
mysql        8.0.16    de764ad211de   2 years ago   443MB
运行 redis镜像

docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes

#  -p:端口映射
#  -d:后台运行
#  redis-server --appendonly yes:开启缓存模式,可以存储至硬盘中

[root@VM-8-3-centos /]# docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes
364d58c2b983d92d0cb14359c8176296f806277dffbc0509a07004f7e585ca38
[root@VM-8-3-centos /]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
364d58c2b983   redis          "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
88ea62512549   mysql:8.0.16   "docker-entrypoint.s…"   7 hours ago     Up 7 hours     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
测试reids

我们使用给可视化工具连接redis,这里我使用的是Reids Desktop Manger,大家感兴趣的可以去下载!

在这里插入图片描述
我们host填写我们的ip地址,服务器要去放行6379端口。由于没有设置密码,我们只需要填写ip和端口即可,端口我们使用的默认的6379。
在这里插入图片描述
这里报错显示连接错误是因为服务器没有开放对应端口,我们去开放端口(这里使用的是腾讯云,阿里云则是去开放安全组)然后再进行连接。
在这里插入图片描述
在这里我们放通了6379端口再进行测试

这次我们发现已经成功连接了。

2、SpringBoot 多模块项目打包

# 1.修改配置文件
# 2.打包项目

2-1、修改配置文件

我们修改ip为参数,因为我们在项目部署之后不可能再去修改我们的源代码了。假设redis出现问题需要更换,我们不可能再去修改ip,所以我们使用参数来进代替,在docker中使用--link进行容器的关联即可。
不再才用上述方法,会有小问题,大家直接使用ip地址即可。

2-2、打包项目

很明显我的项目是分有五个模块的,我们在对多模块进行打包时只需要拿取web模块的jar包即可。(其他模块是直接者间接依赖于web模块,具体请自行百度)
在这里插入图片描述

所以我们需要对web的pom进行一定的配置

我们需要在web模块的pom添加这一段配置信息

  <!--多模块打包:只需在启动类所在模块的POM文件:指定打包插件 -->
    <build>
        <plugins>
            <plugin>
                <!--该插件主要用途:构建可执行的JAR -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.0.1.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

打开右边侧边栏的依赖管理,找到父工程项目。首先进行 clean ,之后进行 package。

在这里插入图片描述

我们去web目录下的target中找到jar文件

我把他拷贝出来换了个名字

我们可以在cmd中 使用 java -jar 命令来运行jar包

但是我们会发现服务是后台接口是无法请求的,因为我们的mysql和redis是有连接成功的。

3、项目部署

# 1.我们使用fxtp将jar包上传到服务器中
# 2.编写Dockerfile
# 3.构建镜像
# 4.运行镜像

3-1、上传至服务器

3-2、编写Dockerfile

# Dicckerfile 必须和jar包在同一目录下
[root@VM-8-3-centos blog]# vim Dockerfile

FROM java:8
EXPOSE 9999

VOLUME /tmp

ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/{TZ} /etc/localhosttime && echo "{TZ}" > /etc/timezone

ADD nanjustar-blog.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]

# FROM java:8:表示基于 Jdk8 环境
# EXPOSE 9999:表示对外暴露端口
# VOLUME /tmp:表示挂载在/tmp目录下
# RUN bash -c 'touch /app.jar':表示把jar包添加到镜像服务的根目录中并改名app.jar
# ENTRYPOINT ["java","-jar","/app.jar"]:启动命令

3-3、构建镜像

# 构建镜像 注意最后面有一个点   nanjustar为我自定义的镜像名称
docker build  -t nanjustar .

 ---> d23bdf5b1b1b
Step 2/8 : EXPOSE 9999
 ---> Running in 430864c569e2
Removing intermediate container 430864c569e2
 ---> 864d4b4fcea6
Step 3/8 : VOLUME /tmp
 ---> Running in 8f38028bb40d
Removing intermediate container 8f38028bb40d
 ---> 9e4b8cdf46cc
Step 4/8 : ENV TZ=Asia/Shanghai
 ---> Running in e5f60c461868
Removing intermediate container e5f60c461868
 ---> b29a70fda153
Step 5/8 : RUN ln -sf /usr/share/zoneinfo/{TZ} /etc/localhosttime && echo "{TZ}" > /etc/timezone
 ---> Running in 665b55ef516a
Removing intermediate container 665b55ef516a
 ---> e8308e6135f5
Step 6/8 : ADD nanjustar-blog.jar /app.jar
 ---> a8e790d4947c
Step 7/8 : RUN bash -c 'touch /app.jar'
 ---> Running in ca502827bef2
Removing intermediate container ca502827bef2
 ---> ad8adf1e502b
Step 8/8 : ENTRYPOINT ["java","-jar","/app.jar"]
 ---> Running in 195e052a56b4
Removing intermediate container 195e052a56b4
 ---> 786a2d1157a4
Successfully built 786a2d1157a4
Successfully tagged nanjustar:latest

# 镜像构建完成,使用 docker images 查看
[root@VM-8-3-centos blog]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nanjustar    latest    786a2d1157a4   52 seconds ago   759MB
redis        latest    02c7f2054405   6 days ago       105MB
mysql        8.0.16    de764ad211de   2 years ago      443MB
java         8         d23bdf5b1b1b   4 years ago      643MB

3-4、运行镜像

#运行镜像 --link 镜像名:参数名
docker run --name nanjublog -p 9999:9999 -d nanjustar
cc472a4a22815b79e77f5e112393dc23596ae7cba7d4b3ecbde674683ac217a4


# docker ps 我们会发现我们的镜像已经跑起来了
[root@VM-8-3-centos blog]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
cc472a4a2281   nanjustar      "java -jar /app.jar"     41 seconds ago   Up 40 seconds   0.0.0.0:9999->9999/tcp, :::9999->9999/tcp              nanjublog
364d58c2b983   redis          "docker-entrypoint.s…"   53 minutes ago   Up 53 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
88ea62512549   mysql:8.0.16   "docker-entrypoint.s…"   8 hours ago      Up 8 hours      0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

最后我们通过ip访问9999端口,发现访问成功!

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
目录
相关文章
|
5月前
|
安全 Java 持续交付
如何实现上传jar直接部署成功,这篇文章直接带你上手springboot实现jar包热更新!
本文详细讲解了在Spring Boot应用中实现Jar包热更新的实践方法。通过自定义类加载器(`HotClassLoader`),动态加载和卸载指定目录下的Jar包,结合Spring Bean动态注册机制,使新加载的类能够被Spring容器管理。同时,提供了文件上传接口,方便用户手动触发Jar包更新。文章还强调了安全性、依赖管理和线程安全等注意事项,并给出了测试步骤和总结,帮助开发者高效实现热更新功能,减少服务中断和提升开发效率。
|
7月前
|
XML Java 应用服务中间件
SpringBoot-打包&部署
SpringBoot 项目支持两种打包方式:WAR 包和 JAR 包。JAR 包内置 Tomcat,可直接运行;WAR 包需部署在外部 Tomcat 上。JAR 包通过 `mvn clean package` 打包并用 `java -jar` 运行,支持后台运行和 JVM 参数配置。WAR 包需修改 pom.xml 为 war 类型,移除嵌入式 Tomcat 依赖,添加 servlet-api,并继承 `SpringBootServletInitializer`。配置文件可通过外部 application.yml 覆盖,默认优先级高于 JAR 内部配置。
318 17
SpringBoot-打包&部署
|
5月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
364 70
|
6月前
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
423 79
|
7月前
|
Java 应用服务中间件 Maven
SpringBoot项目打包成war包
通过上述步骤,我们成功地将一个Spring Boot应用打包成WAR文件,并部署到外部的Tomcat服务器中。这种方式适用于需要与传统Servlet容器集成的场景。
355 8
|
8月前
|
JavaScript 搜索推荐 Java
基于SpringBoot+Vue实现的家乡特色推荐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
8月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的高校食堂移动预约点餐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
4月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
353 1
|
5月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
368 7
|
4月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
378 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发