1. 程式人生 > >Stringboot項目打war包

Stringboot項目打war包

emp create ota 們的 run方法 con protect ioc startup

正常的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容器了。

Stringboot項目打war包