傳統的Web應用在發布之前通常會打成WAR包,然后將WAR包部署到Tomcat等容器中使用,而通過前面的學習我們已經知道,Spring Boot應用既能以JAR包的形式部署,又能以WAR包的形式部署。
JAR包
打包方式是JAR,在idea中只需要執行Maven的package命令就可以將項目打成一個JAR包
JAR包復制到系統D盤,並使用壓縮軟件打開。我們可以在其lib文件夾中發現很多JAR包,實際上這些JAR包就是項目所依賴的JAR包,其中還包括了Tomcat的JAR包
由於在項目JAR包中已經包含了Tomcat,所以我們不需要另外部署Tomcat就可以在命令行中將項目啟動起來。
在命令提示符窗口中進入JAR包所在目錄(D盤),並通過如下命令來執行JAR包:
java -jar springboot-0.0.1-SNAPSHOT.jar
WAR包
雖然通過Spring Boot內嵌的Tomcat可以直接運行所打的JAR包,但是有時候我們也會希望通過外部的Tomcat來管理多個項目。由於JAR包在Tomcat中是無法運行的,所以我們需要將項目打成WAR包的形式。
要想將項目打成WAR包,並可以在Tomcat中運行,需要執行以下兩個步驟。
1. 修改打包方式,並添加Tomcat依賴
將項目pom.xml中<packaging>元素內的jar修改為war,並在文件中添加Tomcat的依賴配置。其修改和添加的配置信息如下:
<packaging>war</packaging> ... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
上述配置代碼中,spring-boot-starter-tomcat是Spring Boot自帶的Tomcat依賴,默認會被打到項目的lib包中。當我們將其依賴范圍設置為provided時,將產生一個可執行的WAR包,在包中的lib-provided目錄會有provided依賴。這樣不僅可以部署到Servlet容器啟動項目,還可以通過命令行執行java-jar命令來運行此應用。
2. 創建SpringBootServletInitializer子類,並覆蓋其配置方法
要產生一個可部署的war包,還需要提供一個SpringBootServletInitializer子類,並覆蓋它的configure()方法。通常我們可以采用兩種方式:一是把應用的主類(引導類)修改為繼承SpringBootServletInitializer的類,並覆蓋configure()方法;二是創建一個繼承了SpringBootServletInitializer的類,並覆蓋configure()方法。以創建SpringBootServletInitializer子類的方式為例,其子類實現代碼如文件3-11所示。
文件3-11 ServletInitializer.java
package com.xc.springboot; import javafx.application.Application; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; public class ServletInitializer extends SpringBootServletInitializer { protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } }
完成這兩步后,即可通過package命令將項目打成WAR包,然后將WAR包部署到Tomcat中啟動。