Spring Boot发布WAR包到Tomcat服务器

作者 | 2020年5月9日

在本文中,我们将向你演示如何把Spring Boot应用程序打包为一个传统的WAR文件,并发布到Tomcat的servlet容器中。

在Spring Boot中,创建一个WAR文件并发布,需要3个步骤:

  • 继承SpringBootServletInitializer
  • 标记内置的Servlet容器为Provided
  • 更新打包方式为WAR

测试环境:

  • Spring Boot 2.1.2.RELEASE
  • Tomcat 8 与 9
  • Maven 3

1. 继承SpringBootServletInitializer

为了便于读者进行对比,首先,我们来看一下使用JAR文件进行部署时对应的Application类。

1.1 JAR文件方式部署

StartWebApplication.java

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class StartWebApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(StartWebApplication.class, args);
    }

}

接下来,再来看一下使用WAR文件部署对应的Application类。

我们需要继承SpringBootServletInitializer类,并重写其中的configure方法。

StartWebApplication.java

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 StartWebApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(StartWebApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(StartWebApplication.class);
    }
}

/*@SpringBootApplication
public class StartWebApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(StartWebApplication.class, args);
    }

}*/

如果同时存在多个主类,还有指定被执行的主类:

pom.xml

<properties>
    <!-- The main class to start by executing java -jar -->
    <start-class>com.mkyong.SpringBootWebApplication</start-class>
</properties>

2. 标记内置的Servlet容器为Provided

pom.xml

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <!-- 标记内置的Servlet容器为Provided -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

</dependencies>

3. 更改打包方式为WAR

pom.xml

<packaging>war</packaging>

发表评论

电子邮件地址不会被公开。 必填项已用*标注