1. 程式人生 > >Spring Boot專案部署到外部Tomcat伺服器

Spring Boot專案部署到外部Tomcat伺服器

前言

Spring Boot專案一般都是內嵌tomcat或者jetty伺服器執行,很少用war包部署到外部的服務容器,即使放到linux中,一般也是直接啟動Application類,但是有些時候我們需要部署到外部的伺服器,這對於Spring Boot來說卻有點麻煩

部署步驟

一、 修改pom

  1. 首先把package改為war
<packaging>war</packaging>
  1. 由於spring-boot-starter-web中內建了tomcat,所以要把它移除
<dependency>
    <groupId>org.springframework.boot</groupId
>
<artifactId>spring-boot-starter-thymeleaf</artifactId> <exclusions> <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>
    <!-- 要為provided-->
    <scope>provided</scope>
</dependency>

二、提供一個SpringBootServletInitializer子類,並重寫configure方法

@SpringBootApplication
public class EasyDeployWarApplication extends SpringBootServletInitializer {

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

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

如果這裡報異常,Caused by: java.lang.IllegalStateException: No SpringApplication sources have been defined. Either override the configure method or add an @Configuration annotation,這是由於專案中有兩個Application啟動類導致的,刪除原來那個即可

三、可以通過war外掛來指定war包的名字

<build>
    <plugins>
        <!-- war部署使用-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <warName>easydeploy</warName>
            </configuration>
        </plugin>
    </plugins>
</build>

假如專案的controller路徑為index,則此時的訪問路徑為:
localhost:8080/easydeploy/index