0
点赞
收藏
分享

微信扫一扫

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


项目结构图:

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

​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_02


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

下载​​Tomcat​​:

  • ​​下载地址​​

博主下载的版本是​​9.0.58​​。

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


​2.6.2​​​版本的​​Spring Boot​​​内嵌的​​Tomcat​​​版本为​​9.0.56​​​,为了避免麻烦,可以使用和内嵌​​Tomcat​​一样的版本。

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


将​​WAR​​​文件复制到​​Tomcat​​​的​​webapps​​文件夹下。

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


启动​​Tomcat​​,双击下图标记的脚本。

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


​Tomcat​​​的启动日志输出如下图所示(存在乱码),可见​​Started ApplicationInitializer in 2.55 seconds (JVM running for 5.401)​​​,说明实现的​​SpringBootServletInitializer​​被使用了。

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


​Tomcat​​启动成功。

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


接口可以正常访问。

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


解决​​Tomcat​​​乱码,需要添加一条配置到​​conf​​​文件夹下的​​logging.properties​​配置文件中。

java.util.logging.ConsoleHandler.encoding = GBK

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

重新启动​​Tomcat​​​,​​Tomcat​​的启动日志输出就没有乱码了。

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


到这里就结束了,如果博主有说错的地方或者大家有不同的见解,欢迎大家评论补充。


举报

相关推荐

0 条评论