SpringBoot2.x 入门:应用打包与启动
![SpringBoot2.x入门:应用打包与启动](https://static001.geekbang.org/infoq/8c/8c9f12972a1c1b1e676060b5a32f8d7c.jpeg)
前提
这篇文章是《SpringBoot2.x入门》专辑的第5篇文章,使用的SpringBoot
版本为2.3.1.RELEASE
,JDK
版本为1.8
。
这篇文章分析一个偏向于运维方面的内容:SpringBoot
应用的打包与启动,分别会分析嵌入式Servlet
容器和非嵌入式Servlet
容器下的应用打包与启动,Servlet
容器以比较常用的Tomcat
为例。
嵌入式Tomcat的打包与启动
嵌入式Tomcat
由spring-boot-starter-web
这个starter
自带,因此不需要改动关于Servlet
容器的依赖。新建一个启动类club.throwable.ch4.Ch4Application
:
添加一个主配置文件application.properties
:
然后在项目的pom.xml
引入Maven
插件spring-boot-maven-plugin
:
然后使用命令mvn clean compile package
(mvn clean
、mvn compile
和mvn package
的组合命令)打包即可:
![](https://static001.geekbang.org/infoq/96/96deb69932f930223a9f1c64201b4198.png)
如果编译和打包命令执行成功的话,控制台输出BUILD SUCCESS:
![](https://static001.geekbang.org/infoq/7f/7f4df06be2c2ea651d8f71c790f87db1.png)
同时项目的target
目录下(除了一些编译出来的class
文件)会多出了一个Jar
包和一个x.jar.original
文件:
![](https://static001.geekbang.org/infoq/dd/dd745bb68ac40e711791fd1c67140b92.png)
而这个Jar
文件正是可运行的文件,可以通过命令(确保已经安装JDK
并且把JRE
的bin
目录添加到系统的Path
中)运行:
控制台输出如下:
![](https://static001.geekbang.org/infoq/38/388110128edf9ed1c9243adbbe33a9f9.png)
一般情况下Jar
的执行命令是:
上面的命令会导致应用挂起在控制台,只要退出控制台,应用就会被Shutdown
。如果在Linux
下,可以使用nohup
(其实就是no hang up
的缩写)命令不挂断地运行Jar
应用,例如:
非嵌入式Tomcat的打包与启动
一般情况下,非嵌入式Tomcat
需要打包成一个war
文件,然后放到外部的Tomcat
服务中运行。
首先要移除掉
spring-boot-starter-web
依赖中的嵌入式Tomcat
相关的依赖,并且引入servlet-api
依赖。还要把打包方式设置为
war
(<packaging>jar</packaging>
替换为<packaging>war</packaging>
)。最后还要升级
maven-war-plugin
插件避免因为缺失web.xml
文件导致打包失败。
![](https://static001.geekbang.org/infoq/2d/2dbd3617fcca20356691a6bcdcf5adc5.png)
这里为了满足兼容性,使用的Tomcat
版本最好和spring-boot-starter-web
中引用的嵌入式Tomcat
的依赖版本完全一致,在SpringBoot:2.3.1.RELEASE
中,该版本为9.0.36
,pom.xml
的依赖内容如下:
这里其实可以选择不排除spring-boot-starter-tomcat
,而是把它的作用域缩小为provided
,这样就能避免额外引入servlet-api
依赖:
新建一个启动类club.throwable.ch3.Ch3Application
,必须继承SpringBootServletInitializer
并且重写configure()
方法执行入口类:
然后使用命令mvn clean compile package
打包:
![](https://static001.geekbang.org/infoq/20/203764f42226e582447adcffb0ba32ab.png)
下载Tomcat9.0.36
,下载地址是https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.36/bin
(因为开发机的系统是64bit的Windows10系统):
![](https://static001.geekbang.org/infoq/b0/b023255ccaf53c5ed4d8cc6bc2c1d686.png)
解压Tomcat
后,把ch3-tomcat-deploy.war
拷贝到webapps
目录下,然后使用bin/startup.bat
启动Tomcat
:
![](https://static001.geekbang.org/infoq/87/8773b0e697e59fb1ccde6290badbfb50.png)
由于application.properties
里面管理的端口和服务上下文路径配置会失效,需要从Tomcat
的入口访问服务,如http://localhost:8080/ch3-tomcat-deploy/
。
小结
这篇文章分别介绍SpringBoot
的Jar
和War
两种打包和部署方式,其实更推荐Jar
包的方式,因为嵌入式容器对于开发和发布而言都会相对简便,而且它是SpringBoot
默认的启动方式,该方式下默认就支持静态资源整合到Jar
包中,可以直接访问。在前后端分离的大型应用中,相对轻量级可以脱离外部容器直接运行的部署方式明显更加吃香。
项目仓库:
Github:https://github.com/zjcscut/spring-boot-guide
(本文完 c-2-d e-a-20200709 1:15 AM)
技术公众号《Throwable文摘》(id:throwable-doge),不定期推送笔者原创技术文章(绝不抄袭或者转载):
![](https://static001.geekbang.org/infoq/67/6748cf4099827ca63ea0539c0a6bb8a6.png)
版权声明: 本文为 InfoQ 作者【Throwable】的原创文章。
原文链接:【http://xie.infoq.cn/article/d2326bb7c2ea62847fa2e0bdc】。文章转载请联系作者。
评论