irpas技术客

Java书签 #SpringCloud:接口请求路径添加统一的Prefix前缀_有时有味

网络 762

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 路径统一增加固定前缀自定义设置。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Java书签 #prefix #前缀呢不妨试试这三种方案