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) ;
}
相关文章
相关标签/搜索