Spring Boot 多种方式更改上下文路径

1. spring boot上下文路径概述

默认情况下,Spring Boot 在根上下文路径("/")上提供内容。

尽管通常最好采用约定而不是配置,但有时我们确实希望拥有自定义路径。

在此快速教程中,我们将介绍配置它的不同方法。

2. 直接设置server.servlet.context-path

与许多其他配置选项一样,可以通过设置属性server.servlet.context-path来更改 Spring Boot 中的上下文路径。

请注意,这适用于 Spring Boot 2.x。对于 Boot 1.x,该属性为 server.context-path

有多种设置此属性的方法,让我们逐一看一下。

2.1 使用application.properties/yml设置

改变上下文路径最直接的方法是在application.properties / yml文件中设置属性:

perl 复制代码
server.servlet.context-path=/baeldung

2.2. 通过Java系统属性设置

我们还可以在上下文初始化之前将上下文路径设置为 Java 系统属性:

java 复制代码
public static void main(String[] args) {
    System.setProperty("server.servlet.context-path", "/test");
    SpringApplication.run(Application.class, args);
}

2.3. 通过操作系统环境变量设置

Spring Boot 还可以依赖于操作系统环境变量。在基于 Unix 的系统上,我们可以这样写:

bash 复制代码
$ export SERVER_SERVLET_CONTEXT_PATH=/baeldung

在 Windows 上,设置环境变量的命令是:

bash 复制代码
> set SERVER_SERVLET_CONTEXT_PATH=/baeldung

注意:上述环境变量适用于 Spring Boot 2.xx 如果我们有 1.xx,则变量为SERVER_CONTEXT_PATH

2.4. 命令行参数设置上下文

我们也可以通过命令行参数动态设置属性:

bash 复制代码
$ java -jar app.jar --server.servlet.context-path=/baeldung

3. Java 代码配置容器上下文

现在让我们通过使用配置 bean 填充 bean 工厂来设置上下文路径

使用 Spring Boot 2 时,我们可以使用 WebServerFactoryCustomizer

java 复制代码
@Bean
public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>
  webServerFactoryCustomizer() {
    return factory -> factory.setContextPath("/baeldung");
}

如果使用 Spring Boot 1 ,我们需要创建EmbeddedServletContainerCustomizer的实例 :

java 复制代码
@Bean
public EmbeddedServletContainerCustomizer
  embeddedServletContainerCustomizer() {
    return container -> container.setContextPath("/baeldung");
}

4. 不同包名下的请求前缀设置

这个配置方法,在很多场景尤为重要,如果一个分布式架构想改装成单体架构,如果把某些组件服务合并到一个项目里面,请求前缀都会统一成一个,这个时候就需要为每个模块组件根据包名单独设置前缀路径。

以下分为webflux 应用和webmvc应用两类进行不同包名下的请求自定义前缀配置

4.1 若为webflux应用

新建一个java配置类,实现WebFluxConfigurer接口,如下代码所示:

java 复制代码
public abstract class WebFluxPathConfig implements WebFluxConfigurer
{

    @Override
    public void configurePathMatching(PathMatchConfigurer configurer)
    {
        configurer.addPathPrefix("/test", cla -> {
            return cla.getName().startsWith("com.sinhy.test");
        });
    }
}

4.2 若为webmvc应用

新建一个java配置类,实现WebMvcConfigurer接口,如下代码所示:

java 复制代码
public abstract class WebFluxPathConfig implements WebMvcConfigurer
{

    @Override
    public void configurePathMatching(PathMatchConfigurer configurer)
    {
        configurer.addPathPrefix("/test", cla -> {
            return cla.getName().startsWith("com.sinhy.test");
        });
    }
}

5. 配置的优先顺序

有了这么多的选择,我们最终可能会对同一属性有多种配置。

以下是 按降序排列的优先级顺序, Spring Boot 使用该优先级顺序来选择有效配置:

  1. Java 配置
  2. 命令行参数
  3. Java 系统属性
  4. 操作系统环境变量
  5. 当前目录中的application.properties
  6. 类路径中的application.properties ( src/main/resources或打包的 jar 文件)

6. 结论

在这篇简短的文章中,我们介绍了在 Spring Boot 应用程序中设置上下文路径或任何其他配置属性的不同方法。

其实,本文只是通过上下文路径这一个参数去做的介绍,该方法适用于springboot的任何参数配置

相关推荐
Flynt1 天前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
掉鱼的猫2 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·spring boot
人活一口气3 天前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc
java小白小6 天前
SpringBoot(01): 初识SpringBoot,从Spring的痛点说起
spring boot
用户3169353811836 天前
如何从零编写一个 Spring Boot Starter
spring boot
程序员晓琪7 天前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly7 天前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
用户3521802454758 天前
🎆从 Prompt 到 Skill:让 Spring AI Agent 学会"装新技能"
人工智能·spring boot·ai编程
用户35218024547511 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
昵称为空C11 天前
手撸一个动态 SQL 执行引擎:不重启服务,在线增删改查任意数据库
spring boot·后端