首先針對問題的疑問點有些不太明確,具體猜測來看感覺像是想要知道打包成jar和war的區別在哪,筆者也就從這個角度去說一下,希望我對問題的理解是對的。
談到打包,那么首先springboot在項目中到底是個什么樣的角色,市面上的多數說法是“全家桶”,說法沒有錯,但是這個全家桶里具體有什么需要搞清楚。
那么,再回到當前這個問題上,springboot相比于傳統spring項目,它們的其中一點區別在于其內嵌了tomcat服務器,這意味著什么,我們不需要外部容器了!從正反兩方面來談談:
一、不可否認,生產環境下springboot項目既可以打成jar,也可以打成war包,但是官方推薦還是打成jar比較好,原因很簡單,“明明給你全家桶的優惠價了,你為什么還要單點呢?”,當啟動springboot應用時,內置tomcat服務器就會啟動并加載應用(這個從啟動日志就能看到);
二、如果打成war包,那么啟動時就需要依賴如tomcat或jetty這些容器(不可避免的還會引起jar沖突,需要手工排除依賴),這樣也就變相違背了springboot設計為全家桶的初衷(因為jar的入口就是main函數呀);
最后總結一下,其實springboot提供了SpringBootStartApplication.class,其作用會因為在外部容器部署下,而不能依賴于Application的main函數了,相反,要以類似于web.xml文件配置的方式來啟動應用的上下文,相當于springboot被你變相打回原形,變成普通的spring項目了。