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