SpringBoot 应用构建 WAR 包

SpringBoot 应用构建 WAR 包

文章目录

  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。


系统环境:

  • JDK 版本:1.8
  • SpringBoot 版本:2.2.4.RELEASE

参考地址:

  • 博文示例项目 Github 地址:https://github.com/my-dlq/blog-example/tree/master/springboot/springboot-war-example

一、简介

SpringBoot 中默认内置 Tomcat 容器,一般是构建 Jar 包方式,但是有时候需要使用外置的 Tomcat 来部署应用,这时候需要将应用打包成 War 包。

SpringBoot 打包 War 方式也很简单,下面将介绍下如何将 SpringBoot 应用打包成 War 包。

二、SpringBoot 构建 WAR 包

1、pom 中指定以 War 方式 打包

1<packaging>war</packaging>

2、SpringBoot Web 排除 Tomcat 依赖

SpringBoot Web 排除 Tomcat 依赖,并且单独引入 Tomcat 依赖,设置 Tomcat 依赖只应用于 编译测试运行 阶段,但是 打包 阶段将会移除该依赖。

 1<dependencies>
 2    <!--SpringBoot Web 依赖,并且排除 SpringBoot Web 中的 Tomcat 依赖-->
 3    <dependency>
 4        <groupId>org.springframework.boot</groupId>
 5        <artifactId>spring-boot-starter-web</artifactId>
 6        <exclusions>
 7            <exclusion>
 8                <groupId>org.springframework.boot</groupId>
 9                <artifactId>spring-boot-starter-tomcat</artifactId>
10            </exclusion>
11        </exclusions>
12    </dependency>
13    <!--添加 Tomcat 依赖,并且设置只在编译,测试,运行等时候应用 Tomcat 依赖,但是打包阶段将会移除该依赖-->
14    <dependency>
15        <groupId>org.springframework.boot</groupId>
16        <artifactId>spring-boot-starter-tomcat</artifactId>
17        <scope>provided</scope>
18    </dependency>
19</dependencies>

3、指定构建的 WAR 包名称

 1<build>
 2    <!--定义 War 包名称-->
 3    <finalName>WAR包名称</finalName>
 4    <plugins>
 5        <plugin>
 6            <groupId>org.springframework.boot</groupId>
 7            <artifactId>spring-boot-maven-plugin</artifactId>
 8        </plugin>
 9    </plugins>
10</build>

4、启动类继承 SpringBootServletInitializer 依赖

启动类中继承 SpringBootServletInitializer 类,并且配置实现 configure 方法:

 1@SpringBootApplication
 2public class Application extends SpringBootServletInitializer {
 3
 4    @Override
 5    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
 6        return builder.sources(Application.class);
 7    }
 8
 9    public static void main(String[] args) {
10        SpringApplication.run(Application.class, args);
11    }
12
13}

三、示例应用

1、Pom.xml 进行配置

 1<?xml version="1.0" encoding="UTF-8"?>
 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 4    <modelVersion>4.0.0</modelVersion>
 5
 6    <parent>
 7        <groupId>org.springframework.boot</groupId>
 8        <artifactId>spring-boot-starter-parent</artifactId>
 9        <version>2.2.4.RELEASE</version>
10    </parent>
11
12    <groupId>mydlq.club</groupId>
13    <artifactId>springboot-war-example</artifactId>
14    <version>0.0.1</version>
15    <name>springboot-war-example</name>
16    <description>springboot war example</description>
17
18    <!--指定以 War 方式打包-->
19    <packaging>war</packaging>
20
21    <properties>
22        <java.version>1.8</java.version>
23    </properties>
24
25    <dependencies>
26        <!--SpringBoot Web 依赖,并且排除 SpringBoot Web 中的 Tomcat 依赖-->
27        <dependency>
28            <groupId>org.springframework.boot</groupId>
29            <artifactId>spring-boot-starter-web</artifactId>
30            <exclusions>
31                <exclusion>
32                    <groupId>org.springframework.boot</groupId>
33                    <artifactId>spring-boot-starter-tomcat</artifactId>
34                </exclusion>
35            </exclusions>
36        </dependency>
37        <!--添加 Tomcat 依赖,并且设置只在编译,测试,运行等时候应用 Tomcat 依赖,但是打包阶段将会移除该依赖-->
38        <dependency>
39            <groupId>org.springframework.boot</groupId>
40            <artifactId>spring-boot-starter-tomcat</artifactId>
41            <scope>provided</scope>
42        </dependency>
43    </dependencies>
44
45    <build>
46        <!--定义 War 包名称-->
47        <finalName>helloworld</finalName>
48        <plugins>
49            <plugin>
50                <groupId>org.springframework.boot</groupId>
51                <artifactId>spring-boot-maven-plugin</artifactId>
52            </plugin>
53        </plugins>
54    </build>
55
56</project>

2、创建示例接口 Controller 类

 1import org.springframework.web.bind.annotation.GetMapping;
 2import org.springframework.web.bind.annotation.RestController;
 3
 4@RestController
 5public class TestController {
 6
 7    @GetMapping("/hello")
 8    public String hello1() {
 9        return "hello world!";
10    }
11
12}

3、SpringBoot 启动类配置

 1import org.springframework.boot.SpringApplication;
 2import org.springframework.boot.autoconfigure.SpringBootApplication;
 3import org.springframework.boot.builder.SpringApplicationBuilder;
 4import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 5
 6@SpringBootApplication
 7public class Application extends SpringBootServletInitializer {
 8
 9    @Override
10    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
11        return builder.sources(Application.class);
12    }
13
14    public static void main(String[] args) {
15        SpringApplication.run(Application.class, args);
16    }
17
18}

四、进行测试

1、将项目构建 WAR 包

使用 Maven 执行打包

1$ mvn clean package

2、下载并配置 Tomcat

1#下载 Tomcat
2$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30.tar.gz
3
4#解压 Tomcat
5$ tar -zxf apache-tomcat-9.0.30.tar.gz
6
7#重命名
8$ mv ./apache-tomcat-9.0.30 ./tomcat

3、将 WAR 包放置到 Tomcat 进行测试

1$ cp /apps/helloworld.war /usr/local/tomcat/bin/helloworld.war

4、启动 Tomcat

1$ /usr/local/tomcat/bin/startup.sh

5、访问服务

访问示例应用的服务地址,可以看到 hello world!字样。

1$ curl http://localhost:8080/helloworld/hello
2
3hello world!

6、关闭 Tomcat

测试完成,关闭 Tomcat:

1$ /usr/local/tomcat/bin/shutdown.sh

---END---


  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。