SpringCloud Feign 踩到的坑(一)

最近在使用SpringCloud的context-path時,遇到了一些坑,記錄一下。app

server.context-path(上下文)

服務提供者的application配置文件中有一個屬性叫server.context-path,是上下文。
以下示:ide

server.context-path=/dev

若是沒有上下文,咱們訪問一個接口的路徑多是:
localhost:8080/user/
若是有上下文dev,那麼這個url必須寫成:
localhost:8080/dev/user/
也就是說:
服務消費者對服務提供者的方法進行訪問時,url也要加上context-path上下文。測試

服務消費者Feign

我這邊項目使用的是Feign進行服務消費,將context-path加在了方法的value裏面。
以下:url

@FeignClient(value="user",fallback=UserMsgHystrix.class)
public interface UserMsgService {

   /**
     * 推送消息
     * 注意:此處的dev 是服務提供者的上下文
     */
    @RequestMapping(value = "/dev/sentMsg", method = RequestMethod.POST)
    public JSONObject sentMsgToWeChat(JSONObject invoiceJson) ;
}

多個環境的context-path

若是隻有一個本地環境,那麼採用上面的作法就解決了。
可是在實際開發中,每每有多個環境。好比本地環境,開發環境,測試環境,正式環境。
而不一樣的環境又有不一樣的上下文,好比開發環境上下文設爲/dev,測試環境上下文設爲/test。
不一樣環境的上下文,能夠使用@FeignClient的path屬性,讀取properties文件的值。
查看@FeignClient的源碼,能夠看到path的註釋:code

/**
     * Path prefix to be used by all method-level mappings. Can be used with or without
     */
    String path() default "";

意思就是:path能夠給方法的url添加前綴server

在服務消費者的開發環境properties文件中,加入:接口

providerContext=dev

在服務消費者的測試環境properties文件中,加入:開發

providerContext=test

在服務消費者的正式環境properties文件中,加入:源碼

providerContext=/

Feign服務消費的代碼以下示:it

@FeignClient(value="user",fallback=UserMsgHystrix.class)
public interface UserMsgService {
    @RequestMapping(value = "sentMsg",path="${providerContext}", method = RequestMethod.POST)
    public JSONObject sentMsgToWeChat(JSONObject invoiceJson) ;
}
相關文章
相關標籤/搜索