1. 引言
Spring Boot 是一種 約定優於配置 的框架,它允許我們創建一個生產級別的 Spring 項目設置,而 Tomcat 是最流行的 Java Servlet 容器之一。
默認情況下,Spring Boot 構建一個獨立的 Java 應用程序,它可以作為桌面應用程序運行,也可以配置為系統服務。然而,在某些環境中,我們無法安裝新的服務或手動運行應用程序。
與獨立應用程序相比,Tomcat 作為一種服務安裝,可以管理同一應用程序進程中的多個應用程序,從而避免為每個應用程序設置特定的配置。
在本教程中,我們將創建一個簡單的 Spring Boot 應用程序並將其配置為在 Tomcat 中運行。
2. 設置 Spring Boot 應用程序
讓我們使用可用的啓動模板之一,來設置一個簡單的 Spring Boot Web 應用程序:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.5</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>請確保獲取 spring-boot-starter-parent 和 spring-boot-starter-web 的最新版本。
無需進行額外的配置,除了標準的 @SpringBootApplication,因為 Spring Boot 會處理默認設置。
接下來,我們將添加一個簡單的 REST 端點以返回一些有效內容:
@RestController
public class TomcatController {
@GetMapping("/hello")
public Collection<String> sayHello() {
return IntStream.range(0, 10)
.mapToObj(i -> "Hello number " + i)
.collect(Collectors.toList());
}
}最後,我們將使用 mvn spring-boot:run, 並在 http://localhost:8080/hello 啓動瀏覽器以檢查結果。
3. 創建 Spring Boot WAR 包
Servlet 容器期望應用程序滿足一定的合同才能部署。對於 Tomcat,合同是 Servlet API 3.0。
為了使我們的應用程序滿足此合同,我們需要對源代碼進行一些小的修改。
首先,我們需要打包 WAR 應用程序而不是 JAR。為此,我們將更改 <em pom.xml</em> 的內容如下:
<packaging>war</packaging>接下來,我們將修改最終的 WAR 文件名,以避免包含版本號:
<build>
<finalName>${artifactId}</finalName>
...
</build>然後我們將添加 Tomcat 依賴項:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>最後,我們將通過實現 SpringBootServletInitializer 接口來初始化 Tomcat 所需的 Servlet 上下文:
@SpringBootApplication
public class SpringBootTomcatApplication extends SpringBootServletInitializer {
}為了構建可部署到 Tomcat 的 WAR 應用程序,我們將執行 mvn clean package。 隨後,WAR 文件位於 target/spring-boot-deployment.war (假設 Maven 的 artifactId 是 “spring-boot-deployment”)。
我們應該考慮這種新的設置使得我們的 Spring Boot 應用程序成為一個非獨立應用程序(如果想要再次使其在獨立模式下運行,可以從 tomcat 依賴中移除 provided 作用域)。
4. 將 WAR 文件部署到 Tomcat
為了在 Tomcat 中部署並運行我們的 WAR 文件,我們需要完成以下步驟:
- 下載 Apache Tomcat 並將其解壓到 tomcat 文件夾中。
- 將我們的 WAR 文件從 target/spring-boot-deployment.war 複製到 tomcat/webapps/ 文件夾中。
- 從終端,導航到 tomcat/bin 文件夾,並執行
- catalina.bat run (在 Windows 系統上)
- catalina.sh run (在基於 Unix 的系統上)
- 前往 http://localhost:8080/spring-boot-deployment/hello
這只是一個快速 Tomcat 設置,請查閲 Tomcat 安裝指南以獲取完整的設置指南。 還有其他部署 WAR 文件到 Tomcat 的方法。
5. 結論
在本文中,我們創建了一個簡單的 Spring Boot 應用程序,並將其轉換為可在 Tomcat 服務器上部署的有效 WAR 應用程序。