1. 概述
Spring Boot 默认在根上下文路径("/")提供服务。
虽然通常建议优先使用约定而非配置,但在某些场景下我们确实需要自定义路径。
这篇简短教程将介绍几种不同的配置方法。
2. 设置属性
与其他配置选项类似,Spring Boot 的上下文路径可以通过设置 server.servlet.context-path
属性来修改。
⚠️ 注意:这适用于 Spring Boot 2.x。对于 Boot 1.x,属性名是 server.context-path
。
有多种方式设置该属性,我们逐一介绍。
2.1. 使用 application.properties / yml
最直接的方式是在 application.properties
/yml
文件中设置属性:
server.servlet.context-path=/baeldung
除了将属性文件放在 src/main/resources
,也可以放在当前工作目录(classpath 外)。
2.2. Java 系统属性
我们还可以在上下文初始化前通过 Java 系统属性设置:
public static void main(String[] args) {
System.setProperty("server.servlet.context-path", "/baeldung");
SpringApplication.run(Application.class, args);
}
2.3. 操作系统环境变量
Spring Boot 也支持读取操作系统环境变量。在 Unix 系统中:
$ export SERVER_SERVLET_CONTEXT_PATH=/baeldung
在 Windows 系统中:
> set SERVER_SERVLET_CONTEXT_PATH=/baeldung
⚠️ 上述环境变量适用于 Spring Boot 2.x.x。如果是 1.x.x 版本,变量名应为 SERVER_CONTEXT_PATH
。
2.4. 命令行参数
也可以通过命令行参数动态设置:
$ java -jar app.jar --server.servlet.context-path=/baeldung
3. 使用 Java 配置
现在我们通过配置 bean 来设置上下文路径。
在 Spring Boot 2 中,可以使用 WebServerFactoryCustomizer
:
@Bean
public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>
webServerFactoryCustomizer() {
return factory -> factory.setContextPath("/baeldung");
}
在 Spring Boot 1 中,需要创建 EmbeddedServletContainerCustomizer
实例:
@Bean
public EmbeddedServletContainerCustomizer
embeddedServletContainerCustomizer() {
return container -> container.setContextPath("/baeldung");
}
4. 配置优先级顺序
面对这么多选项,可能会出现同一属性被多次配置的情况。
以下是 Spring Boot 选择有效配置的优先级顺序(从高到低):
- Java 配置
- 命令行参数
- Java 系统属性
- 操作系统环境变量
- 当前目录下的
application.properties
- classpath 中的
application.properties
(src/main/resources
或打包后的 jar 文件)
5. 总结
这篇简短文章介绍了在 Spring Boot 应用中设置上下文路径(或其他配置属性)的多种方法。
✅ 关键点总结:
- 属性配置最简单(properties/yml)
- 环境变量适合容器化部署
- Java 配置提供最大灵活性
- 优先级顺序避免配置冲突