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请求报错 _

实战SpringCloud通用请求字段拦截处理

(22)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-使用Feign调用服务接口

SpringCloud基础OpenFeign:远程通信

springcloud 定义切面实现对请求操作记录日志,方便后面分析接口详情

springcloud提供开放api接口签名验证