随着微服务架构的广泛应用,Spring Cloud Gateway 作为网关层的核心组件,为服务间的通信与流量管理提供了强大支持。spring-cloud-starter-gateway-mvc
则进一步助力开发者以熟悉的 MVC 模式进行网关开发。同时,将项目以 WAR 包形式部署到外部 Tomcat 服务器,能够满足企业级应用对灵活部署和资源管理的需求。本文基于最新的 Spring Boot 3.4 版本,详细介绍如何实现这一实战过程,帮助开发者紧跟技术趋势,高效完成项目开发与部署。
首先,创建一个新的 Spring Boot 项目,在创建过程中,务必选择 Spring Boot 3.4 版本。创建完成后,打开项目的 pom.xml
文件,进行依赖配置。
Spring Boot 3.4 对依赖管理进行了诸多优化和升级,我们先继承 Spring Boot 3.4 的父项目,引入其强大的自动配置和依赖管理能力:
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>3.4.0version>
parent>
接着,添加 Spring Cloud 依赖管理,由于 Spring Boot 3.4 对 Spring Cloud 版本有一定的适配要求,这里我们选择合适的 Spring Cloud 版本进行依赖导入:
<dependencyManagement>
<dependencies>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>2024.0.0version>
<type>pomtype>
<scope>importscope>
dependencies>
dependencyManagement>
然后,添加核心依赖。spring-cloud-starter-gateway-mvc
是实现网关 MVC 风格开发的关键,spring-boot-starter-web
提供 Web 开发基础支持,同时,因为要以 WAR 包形式部署到外部 Tomcat,所以需要排除 Spring Boot 内置的 Tomcat 依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-gateway-mvcartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
<scope>providedscope>
dependency>
dependencies>
为了将项目打包成 WAR 格式,还需要配置构建插件。spring-boot-maven-plugin
用于 Spring Boot 项目的构建,maven-war-plugin
则专门负责将项目打包为 WAR 包,配置如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-war-pluginartifactId>
<version>3.3.2version>
<configuration>
<failOnMissingWebXml>falsefailOnMissingWebXml>
configuration>
plugin>
plugins>
build>
在 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 {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(GatewayApplication.class);
}
}
主应用程序类 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);
}
}
在 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 {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("example_route", r -> r.path("/example/**")
.uri("http://localhost:8081"))
.build();
}
}
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!";
}
}
在项目根目录下,打开命令行工具,执行 mvn clean package
命令。Maven 会自动清理项目的旧构建结果,编译项目代码,运行测试(如果有测试代码),并最终将项目打包成 WAR 文件。生成的 WAR 文件会存放在项目的 target
目录下。
将 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 生态的强大功能 。