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的任何参数配置

相关推荐
后端小张7 小时前
基于飞算AI的图书管理系统设计与实现
spring boot
考虑考虑1 天前
Jpa使用union all
java·spring boot·后端
阿杆2 天前
同事嫌参数校验太丑,我直接掏出了更优雅的 SpEL Validator
java·spring boot·后端
昵称为空C2 天前
SpringBoot3 http接口调用新方式RestClient + @HttpExchange像使用Feign一样调用
spring boot·后端
麦兜*2 天前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
麦兜*2 天前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring
汤姆yu2 天前
基于springboot的毕业旅游一站式定制系统
spring boot·后端·旅游
计算机毕业设计木哥3 天前
计算机毕设选题推荐:基于Java+SpringBoot物品租赁管理系统【源码+文档+调试】
java·vue.js·spring boot·mysql·spark·毕业设计·课程设计
hdsoft_huge3 天前
Java & Spring Boot常见异常全解析:原因、危害、处理与防范
java·开发语言·spring boot
AD钙奶-lalala3 天前
SpringBoot实现WebSocket服务端
spring boot·后端·websocket