Spring Boot快速入門之(四):Tomcat 部署
【注】本文譯自:https://www.tutorialspoint.com/spring_boot/spring_boot_tomcat_deployment.htm

? ? 使用?Spring Boot 應(yīng)用,我們可以創(chuàng)建一個 war 文件部署到 web 服務(wù)器中。本文講解如何創(chuàng)建 war 文件并將 Spring Boot 應(yīng)用部署到 Tomcat web 服務(wù)器中。
Spring Boot Servlet 初始化器
? ? 傳統(tǒng)的部署方式是將 Spring Boot 應(yīng)用中?@SpringBootApplication?注解的類擴展自?SpringBootServletInitializer?類。Spring Boot Servlet Initializer 類文件允許你在使用 Servlet 窗口啟動時配置應(yīng)用。
? ? 用于 JAR 文件部署的 Spring Boot 應(yīng)用類文件示例如下:
package com.tutorialspoint.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
???public static void main(String[] args) {
??????SpringApplication.run(DemoApplication.class, args);
???}
}
? ? 我們需要擴展類?SpringBootServletInitializer?以支持?WAR 文件部署。對應(yīng)的 Spring Boot 應(yīng)用類文件如下:
package com.tutorialspoint.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class DemoApplication??extends SpringBootServletInitializer {
???@Override
???protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
??????return application.sources(DemoApplication.class);
???}
???public static void main(String[] args) {
??????SpringApplication.run(DemoApplication.class, args);
???}
}
設(shè)置主類
? ? 在 Spring Boot 中,我們需要在構(gòu)件文件中指定主類??墒褂孟旅娴拇a片段:
? ? 對于 Maven,在?pom.xml?中增加啟動類屬性,如下所示:
<start-class>com.tutorialspoint.demo.DemoApplication</start-class>
? ? 對于Gradle,在?build.gradle 中加入主類名,如下所示:
mainClassName="com.tutorialspoint.demo.DemoApplication"
更新 JAR 包到 WAR 中
? ? 我們還要用下面的代碼片段更新 JAR 包到 WAR 中:
? ? 對于 Maven,pom.xml?中打包?WAR 的插件如下:
<packaging>war</packaging>
? ? 對于 Gradle,在?build.gradle 中加上 應(yīng)用和 war 插件,如下所示:
apply plugin: ‘war’
apply plugin: ‘a(chǎn)pplication’
? ?現(xiàn)在,讓我們編寫一個簡單的 Rest 端點,返回 “Hello World from Tomcat” 字符串。要編寫 Rest Endpoint,我們要在構(gòu)建文件中加上 Spring Boot web starter 依賴。
? ?對于 Maven,在?pom.xml 中加上?Spring Boot starter 依賴,如下所示:
<dependency>
? <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId></dependency>
? ?對于 Gradle,在?build.gradle?中加上?Spring Boot starter 依賴,如下所示:
dependencies {
? compile('org.springframework.boot:spring-boot-starter-web')
}
? ?現(xiàn)在,在?Spring Boot 應(yīng)用類文件中編寫 Rest 端點,示例代碼如下:
package com.tutorialspoint.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication extends SpringBootServletInitializer {
???@Override
???protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
??????return application.sources(DemoApplication.class);
???}
???public static void main(String[] args) {
??????SpringApplication.run(DemoApplication.class, args);
???}
???
???@RequestMapping(value = "/")
???public String hello() {
??????return "Hello World from Tomcat";
???}
}
打包應(yīng)用
? ?如下所示,使用Maven 或 Gradle 命令將應(yīng)用打包成 WAR 文件以部署到 Tomcat 服務(wù)器:
? ?對于 Maven,用?mvn package?來打包應(yīng)用。之后,會創(chuàng)建一個 WAR 文件,可以在 target 目錄下找到它,如下圖:


? ?對于 Gradle,用?gradle clean build?來打包應(yīng)用。之后,會創(chuàng)建一個 WAR 文件,可以在 build/libs?目錄下找到它,如下圖:


部署到 Tomcat
? ?現(xiàn)在,運行?Tomcat 服務(wù)器,在 webapps 目錄下部署 WAR 文件,如下圖所示:


? ?部署成功之后,在web 瀏覽器中敲入?http://localhost:8080/demo-0.0.1-SNAPSHOT/,屏幕截圖如下:

? ? 全部代碼如下:
? ? pom.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
???xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
???<groupId>com.tutorialspoint</groupId>
???<artifactId>demo</artifactId>
???<version>0.0.1-SNAPSHOT</version>
???<packaging>war</packaging>
???<name>demo</name>
???<description>Demo project for Spring Boot</description>
???
???<parent>
??????<groupId>org.springframework.boot</groupId>
??????<artifactId>spring-boot-starter-parent</artifactId>
??????<version>1.5.8.RELEASE</version>
??????<relativePath/> <!-- lookup parent from repository -->
???</parent>
???<properties>
??????<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
??????<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
??????<java.version>1.8</java.version>
??????<start-class>com.tutorialspoint.demo.DemoApplication</start-class>
???</properties>
???<dependencies>
??????<dependency>
?????????<groupId>org.springframework.boot</groupId>
?????????<artifactId>spring-boot-starter-web</artifactId>
??????</dependency>
??????<dependency>
?????????<groupId>org.springframework.boot</groupId>
?????????<artifactId>spring-boot-starter-test</artifactId>
?????????<scope>test</scope>
??????</dependency>
???</dependencies>
???<build>
??????<plugins>
?????????<plugin>
????????????<groupId>org.springframework.boot</groupId>
????????????<artifactId>spring-boot-maven-plugin</artifactId>
?????????</plugin>
??????</plugins>
???</build>
???
</project>
? ? build.gradle
buildscript {
???ext {
??????springBootVersion = '1.5.8.RELEASE'
???}
???repositories {
??????mavenCentral()
???}
dependencies {
??????classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
???}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'
apply plugin: 'application'
group = 'com.tutorialspoint'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
mainClassName = "com.tutorialspoint.demo.DemoApplication"
repositories {
???mavenCentral()
}
dependencies {
???compile('org.springframework.boot:spring-boot-starter-web')
???testCompile('org.springframework.boot:spring-boot-starter-test')
}
? ? 主 Spring Boot 應(yīng)用類文件如下:
package com.tutorialspoint.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication??extends SpringBootServletInitializer {
???@Override
???protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
??????return application.sources(DemoApplication.class);
???}
???public static void main(String[] args) {
??????SpringApplication.run(DemoApplication.class, args);
???}
???
???@RequestMapping(value = "/")
???public String hello() {
??????return "Hello World from Tomcat";
???}
}