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.properties 或 application.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 会按照以下优先级顺序(从高到低)来决定最终生效的配置:
- Java 配置(如
@Bean定义) - 命令行参数
- Java 系统属性
- 操作系统环境变量
- 当前目录下的
application.properties - 类路径中的
application.properties(如src/main/resources或打包后的 JAR 文件内)
5. 结论
在本文中,我们简要介绍了在 Spring Boot 应用中设置上下文路径(或任何其他配置属性)的多种方法。