Spring Cloud Gateway MVC 基于 Spring Boot 3.4 以 WAR 包形式部署于外部 Tomcat 实战

一、引言

随着微服务架构的广泛应用,Spring Cloud Gateway 作为网关层的核心组件,为服务间的通信与流量管理提供了强大支持。spring-cloud-starter-gateway-mvc 则进一步助力开发者以熟悉的 MVC 模式进行网关开发。同时,将项目以 WAR 包形式部署到外部 Tomcat 服务器,能够满足企业级应用对灵活部署和资源管理的需求。本文基于最新的 Spring Boot 3.4 版本,详细介绍如何实现这一实战过程,帮助开发者紧跟技术趋势,高效完成项目开发与部署。

二、项目依赖配置

2.1 创建项目与依赖引入

首先,创建一个新的 Spring Boot 项目,在创建过程中,务必选择 Spring Boot 3.4 版本。创建完成后,打开项目的 pom.xml 文件,进行依赖配置。

Spring Boot 3.4 对依赖管理进行了诸多优化和升级,我们先继承 Spring Boot 3.4 的父项目,引入其强大的自动配置和依赖管理能力:

xml 复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.4.0</version>
</parent>

接着,添加 Spring Cloud 依赖管理,由于 Spring Boot 3.4 对 Spring Cloud 版本有一定的适配要求,这里我们选择合适的 Spring Cloud 版本进行依赖导入:

xml 复制代码
<dependencyManagement>
    <dependencies>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>2024.0.0</version>
        <type>pom</type>
        <scope>import</scope>
    </dependencies>
</dependencyManagement>

然后,添加核心依赖。spring-cloud-starter-gateway-mvc 是实现网关 MVC 风格开发的关键,spring-boot-starter-web 提供 Web 开发基础支持,同时,因为要以 WAR 包形式部署到外部 Tomcat,所以需要排除 Spring Boot 内置的 Tomcat 依赖:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway-mvc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 排除内置的 Tomcat 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

2.2 构建插件配置

为了将项目打包成 WAR 格式,还需要配置构建插件。spring-boot-maven-plugin 用于 Spring Boot 项目的构建,maven-war-plugin 则专门负责将项目打包为 WAR 包,配置如下:

xml 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

三、项目核心代码实现

3.1 Servlet 初始化类

在 Spring Boot 3.4 中,为了使项目能够在外部 Tomcat 上正确启动,依然需要创建一个继承自 SpringBootServletInitializer 的类。该类负责引导 Spring Boot 应用在 Tomcat 环境中启动,重写 configure 方法指定主应用程序类:

java 复制代码
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import com.example.gateway.GatewayApplication;

public class ServletInitializer extends SpringBootServletInitializer {

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

3.2 主应用程序类

主应用程序类 GatewayApplication 是项目的入口,在 Spring Boot 3.4 中,依然使用 @SpringBootApplication 注解开启自动配置和组件扫描功能:

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GatewayApplication {

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

3.3 路由配置类

GatewayConfig 类中配置 Spring Cloud Gateway 的路由规则,Spring Boot 3.4 对路由配置的底层实现进行了优化,不过使用方式基本保持一致。通过 RouteLocatorBuilder 构建路由,例如将以 /example/ 开头的请求转发到 http://localhost:8081

java 复制代码
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GatewayConfig {

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
           .route("example_route", r -> r.path("/example/**")
                   .uri("http://localhost:8081"))
           .build();
    }
}

3.4 MVC 控制器类

ExampleController 类以 MVC 风格处理转发后的请求,在 Spring Boot 3.4 中,控制器的注解使用和功能实现没有太大变化。通过 @GetMapping 注解定义接口,例如 /message 接口返回特定字符串:

java 复制代码
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ExampleController {

    @GetMapping("/message")
    public String getMessage() {
        return "Hello from Example Controller!";
    }
}

四、项目打包与部署

4.1 项目打包

在项目根目录下,打开命令行工具,执行 mvn clean package 命令。Maven 会自动清理项目的旧构建结果,编译项目代码,运行测试(如果有测试代码),并最终将项目打包成 WAR 文件。生成的 WAR 文件会存放在项目的 target 目录下。

4.2 项目部署

target 目录下的 WAR 文件复制到外部 Tomcat 服务器的 webapps 目录中。启动 Tomcat 服务器,Tomcat 会自动解压 WAR 文件,并部署应用程序。在 Tomcat 的启动日志中,可以查看应用程序的部署进度和相关信息。

五、项目测试

Tomcat 启动成功后,使用浏览器或者 HTTP 客户端工具(如 Postman)发送 GET 请求进行测试。请求地址为 http://localhost:8080/your-context-path/example/message,其中 your-context-path 是 Tomcat 部署应用时的上下文路径(默认为项目名称)。如果项目配置和部署正确,将会收到 Hello from Example Controller! 的响应,表明项目已经成功运行在外部 Tomcat 服务器上。

六、总结

本文基于 Spring Boot 3.4 版本,详细介绍了使用 spring-cloud-starter-gateway-mvc 开发项目,并以 WAR 包形式部署到外部 Tomcat 服务器的全过程。Spring Boot 3.4 带来了性能优化、安全性增强等诸多新特性,结合 Spring Cloud Gateway 和 MVC 模式,能够帮助开发者构建出高效、灵活的微服务网关。通过这种部署方式,企业可以更好地管理应用资源,适应复杂多变的业务场景。在实际项目开发中,开发者可以根据具体需求进一步扩展路由规则,丰富控制器逻辑,充分发挥 Spring 生态的强大功能 。

相关推荐
Rubypyrrha25 分钟前
Spring MVC的工作流程, DispatcherServlet 的工作流程
java·spring·mvc
来一杯龙舌兰3 小时前
【Dockerfile】Dockerfile打包Tomcat及TongWeb应用镜像(工作实践踩坑教学)
docker·中间件·tomcat·国产化·dockerfile·tongweb·容器化部署
武昌库里写JAVA3 小时前
iview table组件 自定义表头
vue.js·spring boot·毕业设计·layui·课程设计
武昌库里写JAVA3 小时前
iview 分页改变每页条数时请求两次问题
vue.js·spring boot·毕业设计·layui·课程设计
计算机学姐4 小时前
基于SpringBoot的同城宠物照看管理系统
java·vue.js·spring boot·后端·mysql·mybatis·宠物
fanTuanye4 小时前
SpringMVC详解
java·spring·mvc
Alsn865 小时前
10.idea中创建springboot项目_jdk17
java·spring boot·intellij-idea
电商api接口开发6 小时前
ASP.NET MVC 入门与提高指南九
asp.net·mvc
佩奇的技术笔记7 小时前
Java学习手册:Spring Boot 自动配置与快速开发
java·spring boot