1. 程式人生 > >如何讓 Spring Boot 專案釋出到 Tomcat 伺服器

如何讓 Spring Boot 專案釋出到 Tomcat 伺服器

剛開始接觸 SpringBoot 的時候很不習慣,因為習慣了傳統的 web 專案的打包和部署方式,SpringBoot 在為我們提供方便的時候,也給部署帶來了一點點小小的“麻煩”,下面的這些步驟是我在工作中的實踐,和大家分享。

第 1 步:將這個 Spring Boot 專案的打包方式設定為 war。

<packaging>war</packaging>

這裡還要多說一句, SpringBoot 預設有內嵌的 tomcat 模組,因此,我們要把這一部分排除掉。 
即:我們在 spring-boot-starter-web 裡面排除了 spring-boot-starter-tomcat
 ,但是我們為了在本機測試方便,我們還要引入它,所以我們這樣寫:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>log4j-over-slf4j</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

第 2 步:提供一個 SpringBootServletInitializer 子類,並覆蓋它的 configure 方法。我們可以把應用的主類改為繼承SpringBootServletInitializer
。或者另外寫一個類。
@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(
            SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

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

注意:部署到 tomcat 以後,訪問這個專案的時候,須要帶上這個專案的 war 包名。

另外,我們還可以使用 war 外掛來定義打包以後的 war 包名稱,以免 maven 為我們預設地起了一個帶版本號的 war 包名稱。例如:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <warName>yemao</warName>
    </configuration>
</plugin>

例如:http://localhost:8080/Boot-1.0/user/show/18

其中,Boot-1.0 是我放在 tomcat 上的 war 包名。