Stringboot專案打war包
正常的boot專案打包打的是jar包,boot專案內建tomcat,一般我打包是:mvn clean install -Dmaven.test.skip 命令
clean 移除所有上一次構建生成的檔案
install 將包安裝至本地倉庫,以讓其它專案依賴
maven.test.skip 跳過測試
執行的命令:java -jar xxx.jar
由於一些外部的原因我們需要將專案打包成war包,這時候我們可以建立一個新的boot專案選擇war包的方式進行參考,這種方式的是spring官方推薦的打包方式,其實打war包也就進行了一下幾步操作:
1、在pom.xml檔案首部增加<packaging>war</packaging>,/ <groupId>com.uloan.ssm</groupId> <artifactId>Uloan</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <!--<packaging>jar</packaging>--> 2、<!--增加下面的依賴覆蓋預設內嵌的Tomcat依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> scope的分類 1.compile:預設值 他表示被依賴專案需要參與當前專案的編譯,還有後續的測試,執行週期也參與其中,是一個比較強的依賴。打包的時候通常需要包含進去 2.test:依賴專案僅僅參與測試相關的工作,包括測試程式碼的編譯和執行,不會被打包,例如:junit 3.runtime:表示被依賴專案無需參與專案的編譯,不過後期的測試和執行週期需要其參與。與compile相比,跳過了編譯而已。例如JDBC驅動,適用執行和測試階段 4.provided:打包的時候可以不用包進去,別的設施會提供。事實上該依賴理論上可以參與編譯,測試,執行等週期。相當於compile,但是打包階段做了exclude操作 5.system:從參與度來說,和provided相同,不過被依賴項不會從maven倉庫下載,而是從本地檔案系統拿。需要新增systemPath的屬性來定義路徑
所以我們這裡採用provided,這也是spring官方推薦的方式。
剩下的就是將我們的啟動類進行修改,我們之前啟動類是boot的啟動方式,我們這邊要修改成tomcat的方式,當然之前的boot啟動方式在我們本地依舊保留使用。
public class ServletInitializer extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(UloanApplication.class); } }
該類繼承了SpringBootServletInitializer並且重寫了configure方法。
jar包和war包啟動區別 jar包:執行SpringBootApplication的run方法,啟動IOC容器,然後建立嵌入式Servlet容器 war包: 先是啟動Servlet伺服器,伺服器啟動Springboot應用(springBootServletInitizer),然後啟動IOC容器 SpringBootServletInitializer例項執行onStartup方法的時候會通過createRootApplicationContext方法來執行run方法,接下來的過程就同以jar包形式啟動的應用的run過程一樣了,在內部會建立IOC容器並返回,只是以war包形式的應用在建立IOC容器過程中,不再建立Servlet容器了。