Java书签 #SpringCloud:接口请求路径添加统一的Prefix前缀
Posted 有时有味
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java书签 #SpringCloud:接口请求路径添加统一的Prefix前缀相关的知识,希望对你有一定的参考价值。
1. 今日书签
实际项目中,多个应用可能对应多个配置中心,并且应用所对应的请求路径也设置了不同的前缀做业务归属。也可能会存在多个应用共用一个配置中心,那这种情况怎么设置统一的 Prefix 前缀呢?
不妨试试这三种方案。
2. 解签方案
1)内嵌Tomcat + 应用配置
使用 spring-boot-starter-web 内嵌 Tomcat。
在 application.properties
中,添加如下配置:
# SpringBoot 2.* 版本
server.servlet.context-path: /wei
或者,在 application.yml
中,添加如下配置:
# SpringCloud 2.* 版本
server:
servlet:
context-path: /wei
不足的是,如果是 DevOps 的多团队敏捷工作流,这种方式可能受限于需要架构同学帮忙确认应用的 application 配置文件(.properties 或者 .yml)与配置中心的应用配置加载并生效的优先级。
2)外置Tomcat + 修改server.xml
修改 Tomcat 中的 server.xml 配置,添加如下配置:
<Service name="Catalina">
<Connector port="8001" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" maxParameterCount="1000" maxSpareThreads="750" maxThreads="1000" minSpareTHreads="50" acceptCount="1000" useBodyEncodingForURI="true"/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false">
<Context path="/wei" docBase="目录" reloadable="true"/>
</Host>
</Engine>
</Service>
不足的是,如果是 DevOps 的多团队敏捷工作流,这种方式可能受限于需要运维同学帮忙进行 server.xml 配置,并且在多环境下(开发+测试+预发+生产)极容易出现漏配,添加运维成本,对于敏捷来说不太友好。
3)外置Tomcat + 自定义WebMvcConfigurer
通过使用外置 Tomcat + 自定义 WebMvcConfigurer 进行不同应用不同 Prefix 前缀统一设置。
自定义 WebMvcConfigurer:
public class ApiPrefixConfig implements WebMvcConfigurer
/**
* Controller请求URL路径统一增加/wei固定前缀
*/
@Override
public void configurePathMatch(PathMatchConfigurer configurer)
configurer.addPathPrefix("/wei", c -> c.isAnnotationPresent(Controller.class))
.addPathPrefix("/wei", c -> c.isAnnotationPresent(RestController.class));
推荐:这样,可以在不修改 server.xml 的情况下,在不需要其他资源支持的情况下,实现 Controller 请求 URL 路径统一增加固定前缀自定义设置。
以上是关于Java书签 #SpringCloud:接口请求路径添加统一的Prefix前缀的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud Feign调用服务接口时,GET请求变成POST请求报错 _
(22)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-使用Feign调用服务接口