配置化Feign接口動態(tài)切換URL方式
配置化Feign接口動態(tài)切換URL
最近有一個項目,其中需要對外調(diào)用的Feign接口的地址在dev、test、pro環(huán)境中都不同,由于沒有引入注冊中心,所以要切換其調(diào)用url。
考慮了很多方式:比如以數(shù)據(jù)庫存儲然后根據(jù)profil-active的不同而動態(tài)讀取,但是因為實現(xiàn)起來會引入較多步驟,就考慮到了根據(jù)配置文件的不同而在部署時動態(tài)加載。
步驟如下:
在不同環(huán)境的配置文件中都對url進(jìn)行配置
定義配置類讀取這些自定義的url配置
實現(xiàn)feign中的RequestInterceptor接口
將讀取到的url和feign接口服務(wù)名映射為map,在調(diào)用feign接口是,feign攔截器會根據(jù)feign接口的定義的name找到對應(yīng)url即可實現(xiàn)不同環(huán)境動態(tài)調(diào)用。
因為不同環(huán)境的配置文件中url不同,所以能調(diào)用到不同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接口都有效。
以上,在開發(fā)、測試等環(huán)境的配置文件配置不同feign接口的url時,部署在響應(yīng)環(huán)境的服務(wù)即調(diào)用響應(yīng)的url。
不同環(huán)境的配置文件配置不同feign接口的url時,部署在相應(yīng)環(huán)境的服務(wù)即調(diào)用相應(yīng)的url。
當(dāng)然,如果能有注冊中心更方便實現(xiàn)。
總結(jié)
這些僅為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis-Plus使用sl4j日志打印SQL的代碼詳解
以下是關(guān)于使用 Spring Boot 起始器替換 slf4j-api 和 logback 依賴的詳細(xì)步驟和注意事項,包括 MyBatis-Plus 的默認(rèn)日志級別信息,需要的朋友可以參考下2024-10-10springmvc fastjson 反序列化時間格式化方法(推薦)
下面小編就為大家?guī)硪黄猻pringmvc fastjson 反序列化時間格式化方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04Java事務(wù)管理學(xué)習(xí)之Hibernate詳解
hibernate是jdbc輕量級的封裝,本身不具備事務(wù)管理的能力,在事物管理層面,一般是委托于底層的jdbc和jta來完成調(diào)度的。下面這篇文章主要給大家介紹了Java事務(wù)管理學(xué)習(xí)之Hibernate的相關(guān)資料,需要的朋友可以參考下。2017-03-03