配置化Feign接口动态切换URL方式
配置化Feign接口动态切换URL
最近有一个项目,其中需要对外调用的Feign接口的地址在dev、test、pro环境中都不同,由于没有引入注册中心,所以要切换其调用url。
考虑了很多方式:比如以数据库存储然后根据profil-active的不同而动态读取,但是因为实现起来会引入较多步骤,就考虑到了根据配置文件的不同而在部署时动态加载。
步骤如下:
在不同环境的配置文件中都对url进行配置

定义配置类读取这些自定义的url配置

实现feign中的RequestInterceptor接口
将读取到的url和feign接口服务名映射为map,在调用feign接口是,feign拦截器会根据feign接口的定义的name找到对应url即可实现不同环境动态调用。
因为不同环境的配置文件中url不同,所以能调用到不同url。
@Configuration
public class FeignUrlInterceptor implements RequestInterceptor {
private Map<String, String> feignUrlMap;
@Autowired
public FeignUrlInterceptor(FeignUrlConfig feignUrlConfig) {
feignUrlMap = new HashMap<>();
feignUrlMap.put(FeignConstant.TEXTSEG_FEIGN_NAME, feignUrlConfig.textsegUrl);
feignUrlMap.put(FeignConstant.DOMAIN_FEIGN_NAME, feignUrlConfig.domainUrl);
}
/**
* Called for every request. Add data using methods on the supplied {@link RequestTemplate}.
*
* @param template
*/
@Override
public void apply(RequestTemplate template) {
String name = template.feignTarget().name();
//System.out.println("name:" + name + "-----------------------------------------------------------------");
String url = this.feignUrlMap.get(name);
//System.out.println("url:" + url + "-----------------------------------------------------------------");
template.target(url);
}
}需要注意的是:
RequestInterceptor接口对所有feign接口都有效。
以上,在开发、测试等环境的配置文件配置不同feign接口的url时,部署在响应环境的服务即调用响应的url。
不同环境的配置文件配置不同feign接口的url时,部署在相应环境的服务即调用相应的url。
当然,如果能有注册中心更方便实现。
总结
这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot基于Mybatis-Plus自动代码生成
这篇文章主要介绍了SpringBoot基于Mybatis-Plus自动代码生成,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-04-04
Springboot项目因为kackson版本问题启动报错解决方案
这篇文章主要介绍了Springboot项目因为kackson版本问题启动报错解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-07-07


最新评论