Spring Boot 項目可以內嵌 Servlet 容器,因此部署極爲方便,可直接打成可執行 JAR 包部署在有 Java 運行環境的服務器上,也可以像傳統的 Java Web 應用程序那樣打成 WAR 包運行。
JAR
使用 spring-boot-maven-plugin 插件可以創建一個可執行的 JAR 應用程序,前提是應用程序的 parent 爲 spring-boot-starter-parent。配置方式如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
配置完成後,在當前項目的根目錄下執行如下 Maven 命令進行打包:
mvn package
或者在 IntelliJ IDEA 中單擊 Maven Project ,找到 Lifecycle 中的 package 雙擊打包。
打包成功後,在當前項目的根目錄下找到 target 目錄, target 目錄中就有剛剛打成的 JAR 包:
boot-0.0.1-SNAPSHOT.jar
這種打包方式的前提是項目使用了 spring-boot-starter-parent 作爲 parent,在大部分項目中,項目的 parent 可能並不是 spring-boot-starter-parent ,而是公司內部定義好的一個配置 ,此時 spring-boot-maven-plugin 插件並不能直接使用,需要多做一些額外配置 :
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.4.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
配置完成後,就可以通過 Maven 命令或者 IntelliJ IDEA 中的 Maven 插件進行打包,打包方式和前文一致。
運行:
java -jar boot-0.0.1-SNAPSHOT.jar &
注意,最後面的 & 表示讓項目在後臺運行。由於在生產環境中,Linux 大多數情況下都是遠程服務器,開發者通過遠程工具連接 Linux ,如果使用上面的命令啓動 JAR,一旦窗口關閉, JAR 就停止運行了,因此一般通過如下命令啓動 JAR:
nohup java -jar boot-0.0.1-SNAPSHOT.jar &
這裏 nohup 表示當窗口關閉時服務不掛起,繼續在後臺運行。
WAR
在一些特殊情況下需要開發者將 Spring Boot 項目打成 WAR 包,然後使用傳統的方式部署, 步驟如下:
修改 pom.xml 文件:
<package>war</package>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
提供 SpringBootServletInitializer 的子類,並覆蓋其 configure 方法完成初始化操作,代碼如下:
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import xyz.ther.boot.BootApplication;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder app) {
return app.sources(BootApplication.class);
}
}
經過以上配置後,接下來就可以對項目進行打包了。打包的方式和打 JAR 包的方式是一樣的,打包成功後在 target 目錄下生成一個 WAR 包,將該文件複製到 Tomcat 的 webapps 目錄下,啓動 Tomcat 即可。