03.05 springboot項目打包成war用tomcat運行好還是打包成jar直接啟動好?為何?

木幽書


在IT軟件界,Java一直佔據著大半壁江山,Java的生態圈環境很好,有著很多優秀的框架,而 Spring Boot 作為Spring框架中的代表,這幾年也越來越火。

Spring Boot是用來簡化Spring應用的配置和開發過程的,此框架採用了“約定優於配置”的理念,免去了繁瑣的XML配置,使我們開發項目更簡單。而且Spring Boot提供了兩種項目打包方式:生成war文件、生成可執行的jar文件,很多Java開發者不清楚這兩種項目打包方式的區別,生產環境該選哪種方式呢?

Spring Boot項目部署方式的區別

1、war包方式部署

war包其實是打包後的Java Web工程,本質上是個壓縮包,裡面包含了很多目錄及文件,我們把war包放入Tomcat這類容器中啟動後,war包就會自動解壓出一個同名的文件夾來。

注意:Spring Boot項目如果要打包成war包來部署,是需要修改項目入口文件代碼的。另外由於Spring Boot內置了Tomcat容器,所以打包成war包時要將內置的Tomcat依懶排除掉。

2、可執行jar文件方式部署

Spring Boot框架默認的打包部署方式是生成一個可執行的jar文件,無論項目多麼複雜,依懶包有多少,最終只有一個jar文件(有些可能有外置的配置文件),在任何一臺裝有JRE/JDK環境的服務器上可以直接以 java -jar xx.jar 這種方式來運行(其實是靠內置的Tomcat來運行的),十分方便。

可執行jar文件方式部署是我們推薦的,特別是在微服務場景下部署更便捷。

生產環境如何選擇佈署方式?

無論是war方式還是jar方式,本質上差別並不大。在生產環境下還是要選擇合適的方式。

  • war包是放在Servlet容器中(如:Tomcat)運行的,所以像上下文路徑、端口號等是war包無法決定的;

  • jar包由於內嵌了Tomcat容器,所以端口號、上下文路徑可由jar包自己決定,雖然方便但是jar方式打包後的文件較war包的要大得多。

綜上,如果服務器配置高、節點多、微服務方式,建議選擇jar方式部署;如果服務器配置跟不上,建議選擇war方式部署(省內存空間)。

以上就是我的觀點,對於這個問題大家是怎麼看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我瞭解更多科技知識!

網絡圈


從事Java服務端研發工作的同學相信都用過springboot框架來開發項目,做過多個項目的同學一定也經歷過war包或jar包的部署方式,甚至同一個團隊有時候不同的項目也會採取不同的方式。

那麼到底是用war包部署還是用jar包部署呢?個人經驗認為,從性能方面考慮兩者都可以做到高併發、高性能。而具體應該採用哪種方式應該看具體的研發團隊規模以及項目研發流程。

war包部署方式

我們將項目打成war包部署到服務器上的tomcat的webapps目錄下,tomcat啟動時候都會解壓這個war包並創建一個同名文件夾,文件夾目錄如下:

其中META-INF文件是war包的描述文件,忽略即可。

主要是WEB-INF文件夾,裡面有class和lib兩個文件夾:

  • class文件基本上會包含我們項目裡的class、properties、xml等文件;

  • lib則是我們依賴的第三方jar包

我們在本地使用maven構建的時候也會在target目錄下形成這樣一系列的文件或文件夾:


jar包部署方式

jar包部署方式的話,實際上是內嵌了tomcat、jetty等容器,運行的時候直接使用java -jar命令即可,後面可以跟一堆jvm啟動運行相關參數。maven下

pom.xml

文件中指定jar包打包方式:

執行mvn clean install命令即可打出jar包:

將jar包傳到服務器上執行java -jar命令即可運行起來。

適合應用場景

個人認為,war包方式適合個人或者小團隊開發,在測試資源不是很充分,無法做全量回歸測試的時候可以考慮這種方式。

比如這次你只改動了幾個java文件,那麼你只需要本地編譯成class文件,然後覆蓋服務器上對應的class文件然後重啟就可以了,這樣對其他功能的影響最小。因為你無法保證本地的無關本次上線的其他代碼是否被改動了,這需要幾個以下條件:

  1. 保證本地編譯代碼的java版本和線上的一致,比如都是jdk1.8.0_151版本;

  2. 利用比較工具比如Beyond Compare來比較本地編譯的class文件和線上的class文件,不同的文件覆蓋掉;

  3. 覆蓋線上文件之前做好備份;

這樣便可以最小改動的上線一個功能,也可以快速回滾,適合個人或小團隊。

jar包部署方式適合的場景是微服務,一個服務裡面功能不多,測試團隊也可以全量回歸其他功能。

有些比較嚴格的研發團隊是走包交付的,也就是研發同學提交一個jar包給測試同學,測試同學只測這個包,這個包測試通過了交給運維去上線,整個流程都是圍繞這個jar包走,不允許中間階段開發人員再修改代碼。這樣避免上線後有問題了測試和開發同學互相diss。


以上就是個人對這個問題的回答,不同的部署方式適合不同的應用場景,但是也不是說非得必須這樣,沒有嚴格一致的標準,具體情況還得具體分析。


java架構設計


兩種方式都可以,看你們的項目與決策吧。

jar包:直接通過內置tomcat運行,不需要額外安裝tomcat。如需修改內置tomcat的配置,只需要在spring boot的配置文件中配置。內置tomcat沒有自己的日誌輸出,全靠jar包應用輸出日誌。但是比較方便,快速,比較簡單。

war包:傳統的應用交付方式,需要安裝tomcat,然後放到waeapps目錄下運行war包,可以靈活選擇tomcat版本,可以直接修改tomcat的配置,有自己的tomcat日誌輸出,可以靈活配置安全策略。相對打成jar包來說沒那麼快速方便。


代碼接盤俠


問這個是不是沒部署過項目呀。這種都不用問的 搞成jar難道你改一下某個代碼你又部署一次呀。查找起來也不方便啊 不要提這些沒技術含量的


亮哥28654462


在我們的實際生產環境中,都是使用jar包的方式,啟動時指定相關的jvm內存配置參數即可,不需要額外安裝tomcat,部署升級都很方便。


Java研發小哥


沒人打zip壓縮包嗎[捂臉]unzip -o覆蓋解壓


廢品回收猿


這兩兩種按理說沒有實質的優劣,只是看需要而定,比如你是用的大型的web容器,只能用war,微服務本身倡導jar.


PoorGuy100795061


都可以,看需求,jar包部署快點,如果你不搞tomcat亂七八糟的功能就用jar包。


啊哈哈叫啊


建議用jar部署,tomcat部署經常會遇到各種兼容性問題,外置tomcat相對麻煩些


松鼠派


單機什麼都行,集群環境肯定是war包去掉tomcat


分享到:


相關文章: