Spring Boot 修改上下文路径(Context Path)

更新于 2025-12-30

baeldung 2024-05-11

1. 概述

Spring Boot 默认将内容部署在根上下文路径(“/”)下。

虽然通常建议“约定优于配置”,但在某些场景下,我们确实希望使用自定义的上下文路径。

在本篇快速教程中,我们将介绍配置上下文路径的不同方式。

2. 通过属性设置

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

注意:此方式适用于 Spring Boot 2.x。对于 Spring Boot 1.x,对应的属性是 server.context-path

有多种方式可以设置该属性,下面我们逐一介绍。

2.1. 使用 application.properties / application.yml

最直接的方式是在 application.propertiesapplication.yml 文件中设置该属性:

server.servlet.context-path=/msm

除了将配置文件放在 src/main/resources 目录下,我们也可以将其放在当前工作目录(即类路径之外)。

2.2. Java 系统属性

我们还可以在 Spring 上下文初始化之前,通过 Java 系统属性来设置上下文路径:

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

2.3. 操作系统环境变量

Spring Boot 也支持从操作系统环境变量中读取配置。在基于 Unix 的系统中,我们可以这样设置:

$ export SERVER_SERVLET_CONTEXT_PATH=/msm

在 Windows 系统中,设置环境变量的命令为:

> set SERVER_SERVLET_CONTEXT_PATH=/msm

上述环境变量适用于 Spring Boot 2.x.x。如果你使用的是 1.x.x 版本,则对应的环境变量为 SERVER_CONTEXT_PATH

2.4. 命令行参数

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

$ java -jar app.jar --server.servlet.context-path=/msm

3. 使用 Java 配置

接下来,我们通过向 Bean 工厂注入配置 Bean 的方式来设置上下文路径。

在 Spring Boot 2 中,我们可以使用 WebServerFactoryCustomizer

@Bean
public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>
  webServerFactoryCustomizer() {
    return factory -> factory.setContextPath("/msm");
}

而在 Spring Boot 1 中,则需创建一个 EmbeddedServletContainerCustomizer 实例:

@Bean
public EmbeddedServletContainerCustomizer
  embeddedServletContainerCustomizer() {
    return container -> container.setContextPath("/msm");
}

4. 配置优先级顺序

由于存在如此多的配置方式,我们可能会对同一个属性设置多个值。

Spring Boot 会按照以下优先级顺序(从高到低)来决定最终生效的配置:

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

5. 结论

在本文中,我们简要介绍了在 Spring Boot 应用中设置上下文路径(或任何其他配置属性)的多种方法。