在專案過程中,可能會遇到比較奇葩的需求,比如:使用@feginclient註解的介面只能配置乙個url,但我又想根據不同的配置項決定我使用哪個url,當然,前提是這兩個url屬於同乙個專案的不同的部署環境。
眾所周知,feign只是個宣告式呼叫,沒有決策機制,所以想通過feign自己來實現是不可能了。
我的實現方式:
1.這兩個feignclient繼承同乙個介面,因為所有的方法都相同,把方法都寫到這個父類介面中,兩個子類介面body體為空即可。
2.配置檔案中增加乙個配置項,如果這個配置項等於某個值,就呼叫乙個feignclient,否則,呼叫另乙個。
下面上**:
公共介面(不需要加@service和@feginclient註解):
public inte***ce assetservice
兩個子類介面(需要加@feginclient和@service註解):
介面1:
@service
@feignclient(name = "ms-asset", url="$")
public inte***ce assetqueryserviceofdevice extends assetservice{}
介面2:
@service
@feignclient(name = "ms-asset", url="$")
public inte***ce assetqueryserviceofproject extends assetservice{}
使用這兩個feginclient:
在controller中使用這兩個feginclient的方法:
(1)給controller的增加構造方法
(2)在controller的構造方法中將@value獲取的變數和這兩個feginclient注入進去,這裡要注意:不能直接使用@value獲取配置檔案中的配置項,然後直接在aggquerycontroller 的構造方法中使用,因為:構造器的執行要早於@value和@autowired,構造方法執行時所有的@value或@autowired註解的物件此時都還為空,導致他們一直為空!
所以要把@value獲取的配置項通過乙個配置類獲取,然後將這個配置類通過構造方法注入到aggquerycontroller !
@requestcontroller
public class aggquerycontroller }
(3)配置類(用@configuration註解的好處是能保證例項化優先順序比較高):
@configuration
public class aggqueryconfig ")
private string assetrequest;
@autowired
private assetqueryservice assetqueryservice;
@autowired
private assetqueryserviceofproject assetqueryserviceofproject;
@autowired
private timeseriesservice timeseriesservice;
public assetservice getassetservice()
return assetqueryserviceofproject;
}}
這樣,在aggquerycontroller中的其他方法中就可以使用assetservice了。 nginx根據請求頭分流到不同後端服務
nginx map配置根據請求頭不同分配流量到不同後端服務,nginx版本為 nginx version nginx 1.17.9 配置nginx.conf檔案 當在電腦上hosts檔案裡配置了aa.hc.harmonycloud.cn網域名稱解析後,訪問時 即server的server name和...
axios請求方式和配置項
npm i axios import axios from axios get請求axios config axios url,config axios.get url,config post請求axios config axios url,config axios.post url,data,co...
winform C 根據配置檔案啟動不同的窗體
visual studio中,新建winform c 專案後,會預設生成乙個主窗體檔案,一般叫 form1,也可以自己改名,反正啟動程式就會首先啟動這個窗體。這是一種固定的模式,那麼如果專案中有多個不同的窗體,不同情況下分別啟動不同的窗體,如何實現呢?第一反應是把主窗體隱藏 hide 然後在主窗體中...