将 Spring Boot应用程序WAR包 部署到 Tomcat 服务器上

x33g5p2x  于2022-09-25 转载在 Spring  
字(2.8k)|赞(0)|评价(0)|浏览(330)

1. 概述

Spring Boot 包含一个嵌入式 Tomcat 服务器,可以轻松运行 Web 应用程序。应用程序代码、库和嵌入式 Tomcat 服务器打包在一个可执行 JAR 中,无需任何额外的服务器设置即可从命令行运行。

但是,嵌入式 Tomcat 服务器并不适合所有环境。可能应该使用独立的 Tomcat 服务器。

在本文中,我们将介绍如何将 Spring boot 应用程序 WAR 部署到独立的 Tomcat 实例。

2. 设置 Spring Boot 应用程序

我们将使用可用的入门模板之一设置一个简单的 Spring Boot Web 应用程序:

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
</parent>
...

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

除了标准之外,不需要额外的配置@SpringBootApplication,因为 Spring Boot 负责默认设置。

我们添加一个简单的 REST EndPoint 来为我们返回一些有效的内容:

2.1 在 Spring Boot 中禁用嵌入式 Tomcat

我们需要告诉 Spring Boot 不要使用其嵌入式 Tomcat 作为应用程序的 servlet 容器。

Maven

将以下依赖项添加到 pom.xml

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

2.2 将包类型改为WAR

现在,让我们将包类型从 JAR 更改为 WAR

更改 pom.xml 中的打包属性:

<packaging>war</packaging>

现在,让我们修改最终的 WAR 文件名以避免包含版本号:

<build>
    <finalName>${artifactId}</finalName>
    ... 
</build>

2.3 创建一个扩展 SpringBootServletInitializer 的类

我们将创建一个类 ServletInitializer,它将为配置扩展类 SpringBootServletInitializer。覆盖 configure() 方法来告诉 Spring Boot 关于这个类,如下所示。

这使得我们的应用程序兼容在单独的 servlet 容器内运行。

public class ServletInitializer extends SpringBootServletInitializer {

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

}

Spring Boot 主类。

@SpringBootApplication
public class SpringBootMavenDeployApplication {

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

}

2.4 创建一个控制器

(这是一个可选部分)我们为此示例创建了一个 Rest Controller 来显示数据,而不是默认的 Spring Boot White Label Error 页面。

@RestController
public class HomeController {

    @GetMapping("/")
    public Collection<String> sayHello() {
        return IntStream.range(0, 10)
                .mapToObj(i -> "Counter Number " + i)
                .collect(Collectors.toList());
    }
}

为了构建我们的 Tomcat 可部署 WAR 应用程序,我们执行 mvn clean package 之后,我们的 WAR 文件在 target/Spring-Boot-Maven-Deploy.war 生成(假设 Maven artifactId 是“Spring -启动-Maven-部署”)。

我们应该考虑到这种新设置使我们的 Spring Boot 应用程序成为非独立应用程序(如果您希望它再次以独立模式工作,请从 tomcat 依赖项中删除 provided 范围)。

3. 将 WAR 部署到 Tomcat

要在 Tomcat 中部署和运行我们的 WAR 文件,我们需要完成以下步骤:

  1. Download Apache Tomcat 并将其解包到 tomcat 文件夹中

  2. 将我们的 WAR 文件从 target/Spring-Boot-Maven-Deploy.war 复制到 tomcat/webapps/ 文件夹

  3. 从终端导航到 tomcat/bin 文件夹并执行

  4. catalina.bat 运行(在 Windows 上)

  5. catalina.sh 运行(在基于 Unix 的系统上)

  6. 转到 http://localhost:8080/ Spring-Boot-Maven-Deploy*/*

这是一个快速的 Tomcat 设置,请查看 ***Tomcat 安装 *** 上的指南以获取完整的设置指南。

5. 总结

在这个简短的指南中,我们创建了一个简单的 Spring Boot 应用程序,并将其转换为可部署在 Tomcat 服务器上的有效 WAR 应用程序。
Github

与往常一样,可以使用示例的完整源代码***over on GitHub。***

相关文章