天天看點

Spring Boot:使用Maven打包成WAR部署到Tomcat

項目結構圖:

Spring Boot:使用Maven打包成WAR部署到Tomcat

​pom.xml​

​:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.2</version>
    </parent>

    <packaging>war</packaging>

    <groupId>com.kaven</groupId>
    <artifactId>springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <name>springboot</name>
    <description>springboot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>hello-world</finalName>
    </build>
</project>      

打包成​

​WAR​

​:

<packaging>war</packaging>      

聲明​

​Spring Boot​

​​應用的内嵌​

​Tomcat​

​​容器的作用域,在應用運作時不使用内嵌​

​Tomcat​

​​容器,因為需要使用外部​

​Tomcat​

​容器。

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

​application.properties​

​:

server.port=8080      

​Spring Boot​

​​應用的預設啟動端口也是​

​8080​

​,這裡隻是為了示範。

​HelloWorldController​

​:

package com.kaven.springboot.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {

    @GetMapping("/hello-world")
    public String helloWorld() {
        return "Hello World";
    }
}      

啟動類:

package com.kaven.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootApplication {

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

​ApplicationInitializer​

​​(繼承​

​SpringBootServletInitializer​

​抽象類,和啟動類同級):

package com.kaven.springboot;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ApplicationInitializer extends SpringBootServletInitializer {


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

​SpringBootServletInitializer​

​​抽象類是一個​

​WebApplicationInitializer​

​​,以傳統的​

​WAR​

​​部署運作​

​SpringApplication​

​​。将​

​Servlet​

​​、​

​Filter​

​​和​

​ServletContextInitializer​

​​這些​

​bean​

​​從應用程式上下文綁定到伺服器。要配置應用程式,需要重寫​

​configure(SpringApplicationBuilder)​

​​方法(調用​

​SpringApplicationBuilder.sources(Class...)​

​​)。如果将​

​SpringBootServletInitializer​

​​與其他​

​WebApplicationInitializer​

​​結合使用,可能還需要添加​

​@Ordered​

​​注解來配置特定的啟動順序。​

​WebApplicationInitializer​

​​僅在建構​

​war​

​檔案并部署它時才需要。

開始打包。

Spring Boot:使用Maven打包成WAR部署到Tomcat
Spring Boot:使用Maven打包成WAR部署到Tomcat

下載下傳​

​Tomcat​

​:

  • ​​下載下傳位址​​

部落客下載下傳的版本是​

​9.0.58​

​。

Spring Boot:使用Maven打包成WAR部署到Tomcat

​2.6.2​

​​版本的​

​Spring Boot​

​​内嵌的​

​Tomcat​

​​版本為​

​9.0.56​

​​,為了避免麻煩,可以使用和内嵌​

​Tomcat​

​一樣的版本。

Spring Boot:使用Maven打包成WAR部署到Tomcat

将​

​WAR​

​​檔案複制到​

​Tomcat​

​​的​

​webapps​

​檔案夾下。

Spring Boot:使用Maven打包成WAR部署到Tomcat

啟動​

​Tomcat​

​,輕按兩下下圖示記的腳本。

Spring Boot:使用Maven打包成WAR部署到Tomcat

​Tomcat​

​​的啟動日志輸出如下圖所示(存在亂碼),可見​

​Started ApplicationInitializer in 2.55 seconds (JVM running for 5.401)​

​​,說明實作的​

​SpringBootServletInitializer​

​被使用了。

Spring Boot:使用Maven打包成WAR部署到Tomcat

​Tomcat​

​啟動成功。

Spring Boot:使用Maven打包成WAR部署到Tomcat

接口可以正常通路。

Spring Boot:使用Maven打包成WAR部署到Tomcat

解決​

​Tomcat​

​​亂碼,需要添加一條配置到​

​conf​

​​檔案夾下的​

​logging.properties​

​配置檔案中。

java.util.logging.ConsoleHandler.encoding = GBK      
Spring Boot:使用Maven打包成WAR部署到Tomcat

重新啟動​

​Tomcat​

​​,​

​Tomcat​

​的啟動日志輸出就沒有亂碼了。

Spring Boot:使用Maven打包成WAR部署到Tomcat