当前位置: 首页 > news >正文

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 的父项目,引入其强大的自动配置和依赖管理能力:

<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 版本进行依赖导入:

<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 依赖:

<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 包,配置如下:

<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 方法指定主应用程序类:

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import com.example.gateway.GatewayApplication;public class ServletInitializer extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(GatewayApplication.class);}
}

3.2 主应用程序类

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

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

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 {@Beanpublic 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 接口返回特定字符串:

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 生态的强大功能 。

相关文章:

  • 高性能数据库架构探索:OceanBase 分布式技术深入解析
  • 【沐风老师】3DMAX按元素UV修改器插件教程
  • 为了结合后端而学习前端的学习日志——【黑洞光标特效】
  • JavaWeb:SpringBootWeb增删改查案例
  • 【数据结构与算法】常见排序算法详解(C++实现)
  • 视频转GIF
  • VMware-centOS7安装redis分布式集群
  • MySQL复合查询全解析:从基础到多表关联与高级技巧
  • llfc项目TCP服务器笔记
  • SpringBoot的汽车商城后台管理系统源码开发实现
  • **马小帅面试记:Java技术问答**
  • Win10下安装Linux-Ubuntu24.04双系统
  • 2025-05-04 Unity 网络基础6——TCP心跳消息
  • Android第三次面试总结之Java篇补充
  • NV214NV217美光闪存固态NV218NV225
  • 基于Hive + Spark离线数仓大数据实战项目(视频+课件+代码+资料+笔记)
  • 【LeetCode Hot100】动态规划篇
  • 二叉搜索树实现删除功能 Java
  • 初识 iOS 开发中的证书固定
  • EasyExcel使用总结
  • 热点问答丨新加坡人民行动党缘何再赢议会选举
  • 抗战回望17︱《青年界》:给一般青年供给一些精神的食料
  • 老人误操作免密支付买几百只鸡崽,经济日报:支付要便捷也要安全
  • 观察|印度购买“阵风”舰载机,为掌控印度洋加速升级海航装备
  • 中虎跳峡封闭仍有游客逆行打卡,景区:专人值守防意外
  • 孙一凡的东欧狂想音乐会:一场穿越东欧的听觉绮梦