IDEA 之 SpringBoot 应用部署
服务端由原来 混合式(Java+JSP)的方式演进成专注于提供服务 API(前后端分离)的方式,开发的明确分工,使的各自开发人员在各自领域的垂直技能的加强,以满足业务的快速迭代,因此也就在这两个方式中,项目的构建方式也有了一定的变化,混合模式中常编译为 war 包,而在前后端分离模式中常编译为 jar 包,这两种文件格式虽然都是一种压缩文件的格式,但实质还是有一些区别,那首先让我们来了解这两种文件它们之间的区别
jar 文件与 war 文件的区别
- war 文件常应用在 混合式 的项目中,war 文件包含Java 相关的项目文件、部署文件,还包含一些前端页面等引用的相关资源文件;jar 文件常应用在 前后端分离 的项目中,jar 文件主要包含Java 相关的项目文件、部署文件
- war 文件中不包含 Tomcat相关文件,必须运行在 Tomcat 容器中;jar 文件中内置了 Tomcat 文件,可直接运行
- war 文件通常使用 SSM 架构;jar 文件通常使用 SpringBoot/SpringCloud 架构
- 无论是 jar 还是 war 都能够使用嵌套容器,java -jar来独立运行
- 只有 war 才能部署到外部容器中;SpringBoot支持多种模板引擎,但JSP 只能在 war 中使用
准备
- System:macOS
- Java:JDK 1.8+
- 编辑器:IDEA
- 包管理:maven/gradle
- 服务器连接:iTerm2
- 项目示例:
- rc-cluster-springboot,这是一个 gradle 管理的 SpringBoot 项目
- rc-ssm,这是一个 maven 管理的 SSM 项目
Windows 连接服务器工具可使用 Xshell 等代替
编译
编译 war
1 | <!-- pom.xml 文件中要指明构建文件的类型 --> |
1 | # clean依赖并编译成 package,也可以执行 mvn clean package -DskipTests |
编译 jar(SpringBoot)
maven
1 | <!-- pom.xml 文件中要指明构建文件的类型 --> |
GUI 操作
命令行 操作
定位到需要构建的模块下,执行如下命令
1 | # clean依赖并编译成 package,也可以执行 mvn clean package -DskipTests |
gradle
GUI 操作
命令行 操作
在需要编译的项目路径下,这里编译子模块springboot-start,前提需要在系统的环境变量中配置好 gradle,macOS 可参考MacBook Pro 初始化文章
1 | # linux or macOS |
部署
部署步骤:
- 备份服务器对应服务,并停止服务运行(如果是第一次部署该服务,可省略)
- 上传应用 jar/war 文件
- 启动上传应用
1 | # 拷贝本地文件到指定服务器的指定目录 |
部署 war
由于 war 包并没有内置 Tomcat 等运行的容器,因此需要你的服务器已经安装了 Tomcat 等服务
部署 jar
iTerm2 部署
1 | # ssh 连接到服务器后,启动应用,如果有需要请先停止已在运行的程序 |
tail 命令
- 命令格式:tail[必要参数][选择参数][文件]
- 功能描述:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理;查看日志文
- 示例:tail -f spring.log
- 命令参数
- -f 循环读取
- -q 不显示处理信息
- -v 显示详细的处理信息
- -c<数目> 显示的字节数
- -n<行数> 显示行数
- –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束.
- -q, –quiet, –silent 从不输出给出文件名的首部
- -s, –sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
Alibaba Cloud Toolkit
视频教程:https://cloud.video.taobao.com/play/u/650480598/p/1/e/6/t/1/216889058961.mp4
Jenkins
关于 Jenkins 的部署,会单独出一篇相关的部署介绍,以及 Jenkins 的相关知识介绍,请移步使用 Jenkins 项目部署
问题
gradle 编译失败
原因:这里的提示spring-boot-2.1.6.RELEASE.jar
文件无法正常下载
解决办法:切换你的网络,或者修改 gradle 仓库镜像地址
缓存文件未下载完全
原因:文件未下载完全,编译时使用了缓存文件
解决办法:删除~/.gradle/caches/modules-2/files-2.1
路径下无法编译通过的包,这里是spring-boot-gradle-plugin
附录
- SpringBoot入门系列(四)—Spring Boot 项目打包运行