天天看點

SpringBoot應用部署于外置Tomcat容器

0x01. 概述

SpringBoot平時我們用的爽歪歪,爽到它自己連Tomcat都自內建了,我們可以直接編寫SBT啟動類,然後一鍵開啟内置的Tomcat容器服務,确實是很好上手。但考慮到實際的情形中,我們的Tomcat伺服器一般是另外部署好了的,有專門的維護方式。此時我們需要剝離掉SBT應用内置的Tomcat伺服器,進而将應用釋出并部署到外置的Tomcat容器之中,本文就實踐一下這個。

0x02. 修改打包方式

修改項目的pom.xml配置,我們修改其打包方式為war方式,如:

<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>           

0x03. 移除SBT自帶的嵌入式Tomcat

修改pom.xml,從maven的pom中移除springboot自帶的的嵌入式tomcat插件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 移除嵌入式tomcat插件 -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>           

0x04. 添加servlet-api依賴

修改pom.xml,在maven的pom中添加servlet-api的依賴

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>           

0x05. 修改啟動類,并重寫初始化方法

在SpringBoot中我們平常用main方法啟動的方式,都有一個SpringBootApplication的啟動類,類似代碼如下:

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

而我們現在需要類似于web.xml的配置方式來啟動spring應用,為此,我們在Application類的同級添加一個SpringBootStartApplication類,其代碼如下:

// 修改啟動類,繼承 SpringBootServletInitializer 并重寫 configure 方法
public class SpringBootStartApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意這裡一定要指向原先用main方法執行的Application啟動類
        return builder.sources(Application.class);
    }
}           

0x06. 部署到外部的Tomcat容器并驗證

  • 在項目根目錄下(即包含

    pom.xml

    的目錄)記性maven打包操作:
mvn clean package           

等待打包完成,出現

[INFO] BUILD SUCCESS

即為打包成功

  • 然後我們把

    target

    目錄下生成的

    war

    包放到tomcat的

    webapps

    目錄下,啟動tomcat,即可自動解壓部署。

最後在浏覽器中驗證:

http://YOUR_IP:[端口号]/[打包項目名]           
  • 也可以直接将項目命名為ROOT,這樣通路根目錄即可通路tomcat中的SpringBoot應用
http://YOUR_IP:[端口号]           

0x07. 後記

作者更多的SpringBt實踐文章在此:

如果有興趣,也可以抽點時間看看作者一些關于容器化、微服務化方面的文章: