配置化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)文章
SpringBoot基于Mybatis-Plus自動代碼生成
這篇文章主要介紹了SpringBoot基于Mybatis-Plus自動代碼生成,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Springboot項目因為kackson版本問題啟動報錯解決方案
這篇文章主要介紹了Springboot項目因為kackson版本問題啟動報錯解決方案,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Java中的LinkedHashMap及LRU緩存機(jī)制詳解
這篇文章主要介紹了Java中的LinkedHashMap及LRU緩存機(jī)制詳解,LinkedHashMap繼承自HashMap,它的多種操作都是建立在HashMap操作的基礎(chǔ)上的,同HashMap不同的是,LinkedHashMap維護(hù)了一個Entry的雙向鏈表,保證了插入的Entry中的順序,需要的朋友可以參考下2023-09-09
Java二級緩存之提升Hibernate應(yīng)用性能的關(guān)鍵詳解
這篇文章主要介紹了Java二級緩存之提升Hibernate應(yīng)用性能的關(guān)鍵,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05

