Spring Boot是用來簡化Spring應(yīng)用的配置和開發(fā)過程的,此框架采用了“約定優(yōu)于配置”的理念,免去了繁瑣的XML配置,使我們開發(fā)項(xiàng)目更簡單。而且Spring Boot提供了兩種項(xiàng)目打包方式:生成war文件、生成可執(zhí)行的jar文件,很多Java開發(fā)者不清楚這兩種項(xiàng)目打包方式的區(qū)別,生產(chǎn)環(huán)境該選哪種方式呢?
Spring Boot項(xiàng)目部署方式的區(qū)別
1、war包方式部署
war包其實(shí)是打包后的Java Web工程,本質(zhì)上是個(gè)壓縮包,里面包含了很多目錄及文件,我們把war包放入Tomcat這類容器中啟動(dòng)后,war包就會(huì)自動(dòng)解壓出一個(gè)同名的文件夾來。
注意:Spring Boot項(xiàng)目如果要打包成war包來部署,是需要修改項(xiàng)目入口文件代碼的。另外由于Spring Boot內(nèi)置了Tomcat容器,所以打包成war包時(shí)要將內(nèi)置的Tomcat依懶排除掉。
2、可執(zhí)行jar文件方式部署
Spring Boot框架默認(rèn)的打包部署方式是生成一個(gè)可執(zhí)行的jar文件,無論項(xiàng)目多么復(fù)雜,依懶包有多少,最終只有一個(gè)jar文件(有些可能有外置的配置文件),在任何一臺(tái)裝有JRE/JDK環(huán)境的服務(wù)器上可以直接以 java -jar xx.jar 這種方式來運(yùn)行(其實(shí)是靠內(nèi)置的Tomcat來運(yùn)行的),十分方便。
可執(zhí)行jar文件方式部署是我們推薦的,特別是在微服務(wù)場景下部署更便捷
生產(chǎn)環(huán)境如何選擇布署方式?
無論是war方式還是jar方式,本質(zhì)上差別并不大。在生產(chǎn)環(huán)境下還是要選擇合適的方式。
war包是放在Servlet容器中(如:Tomcat)運(yùn)行的,所以像上下文路徑、端口號(hào)等是war包無法決定的;
jar包由于內(nèi)嵌了Tomcat容器,所以端口號(hào)、上下文路徑可由jar包自己決定,雖然方便但是jar方式打包后的文件較war包的要大得多。
綜上,如果服務(wù)器配置高、節(jié)點(diǎn)多、微服務(wù)方式,建議選擇jar方式部署;如果服務(wù)器配置跟不上,建議選擇war方式部署(省內(nèi)存空間)
從事Java服務(wù)端研發(fā)工作的同學(xué)相信都用過springboot框架來開發(fā)項(xiàng)目,做過多個(gè)項(xiàng)目的同學(xué)一定也經(jīng)歷過war包或jar包的部署方式,甚至同一個(gè)團(tuán)隊(duì)有時(shí)候不同的項(xiàng)目也會(huì)采取不同的方式。
那么到底是用war包部署還是用jar包部署呢?個(gè)人經(jīng)驗(yàn)認(rèn)為,從性能方面考慮兩者都可以做到高并發(fā)、高性能。而具體應(yīng)該采用哪種方式應(yīng)該看具體的研發(fā)團(tuán)隊(duì)規(guī)模以及項(xiàng)目研發(fā)流程。
war包部署方式
我們將項(xiàng)目打成war包部署到服務(wù)器上的tomcat的webapps目錄下,tomcat啟動(dòng)時(shí)候都會(huì)解壓這個(gè)war包并創(chuàng)建一個(gè)同名文件夾,文件夾目錄如下:
其中META-INF文件是war包的描述文件,忽略即可。
主要是WEB-INF文件夾,里面有class和lib兩個(gè)文件夾:
class文件基本上會(huì)包含我們項(xiàng)目里的class、properties、xml等文件;
lib則是我們依賴的第三方j(luò)ar包
我們?cè)诒镜厥褂胢aven構(gòu)建的時(shí)候也會(huì)在target目錄下形成這樣一系列的文件或文件夾:
jar包部署方式
SpringBoot項(xiàng)目可以打成jar包部署,也可以打成war包部署,它們倆本質(zhì)上都是使用Tomcat來部署應(yīng)用,但是使用上會(huì)有不同:
jar包方式,打jar包的時(shí)候其實(shí)還是把Tomcat內(nèi)嵌到j(luò)ar包中了,將應(yīng)用代碼和部署應(yīng)用服務(wù)器集成到一個(gè)jar包中,通過設(shè)置啟動(dòng)類(一般是SpringBoot的應(yīng)用啟動(dòng)類)來實(shí)現(xiàn)jar包的運(yùn)行,這種方式對(duì)于運(yùn)維操作來說方便、快捷,因?yàn)椴僮骶褪且粋€(gè)jar包,但是它的缺點(diǎn)就是無法在jar包外部配置Tomcat的相關(guān)配置參數(shù),如果需要修改只能修改SpringBoot內(nèi)部規(guī)定的配置文件,還有就是使用jsp或其它模板語言上會(huì)很麻煩,因?yàn)橛行┎患嫒莼蚺渲寐闊?,如果你的?yīng)用不涉及前端頁面展示,前后端分離的模式,推薦jar包方式。
war包方式,這種方式大家都很熟悉了,將編譯后的class文件和應(yīng)用資源按照war的規(guī)則打包,war包直接放到Tomcat服務(wù)器設(shè)置的war包目錄下,啟動(dòng)Tomcat就會(huì)解壓war包、加載應(yīng)用資源、部署應(yīng)用,這種方式成熟、普遍,但是運(yùn)維相對(duì)來說管的事多一些,例如Tomcat服務(wù)器的配置、Tomcat資源的管理、war包發(fā)布到Tomcat等,不過在出現(xiàn)問題時(shí),這種方式可以按照之前的邏輯去發(fā)現(xiàn)問題、解決問題,如果是jar包方式,就只能研發(fā)自己去解決了,還有如果你的項(xiàng)目有前端展示層的代碼,前后端不是分離的,例如使用jsp或展示層模板語言,推薦使用war包方式。
兩種方式都可以,看你們的項(xiàng)目與決策吧。
jar包:直接通過內(nèi)置tomcat運(yùn)行,不需要額外安裝tomcat。如需修改內(nèi)置tomcat的配置,只需要在spring boot的配置文件中配置。內(nèi)置tomcat沒有自己的日志輸出,全靠jar包應(yīng)用輸出日志。但是比較方便,快速,比較簡單。
war包:傳統(tǒng)的應(yīng)用交付方式,需要安裝tomcat,然后放到waeapps目錄下運(yùn)行war包,可以靈活選擇tomcat版本,可以直接修改tomcat的配置,有自己的tomcat日志輸出,可以靈活配置安全策略。相對(duì)打成jar包來說沒那么快速方便。