最近在使用SpringCloud的context-path时,遇到了一些坑,记录一下。

server.context-path(上下文)

服务提供者的application配置文件中有一个属性叫server.context-path,是上下文。

如下示:

server.context-path=/dev

如果没有上下文,我们访问一个接口的路径可能是:

localhost:8080/user/

如果有上下文dev,那么这个url必须写成:

localhost:8080/dev/user/

也就是说:

服务消费者对服务提供者的方法进行访问时,url也要加上context-path上下文。

服务消费者Feign

我这边项目使用的是Feign进行服务消费,将context-path加在了方法的value里面。

如下:

@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的注释:

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

意思就是:path可以给方法的url添加前缀

在服务消费者的开发环境properties文件中,加入:

providerContext=dev

在服务消费者的测试环境properties文件中,加入:

providerContext=test

在服务消费者的正式环境properties文件中,加入:

providerContext=/

Feign服务消费的代码如下示:

@FeignClient(value="user",fallback=UserMsgHystrix.class)
public interface UserMsgService {
@RequestMapping(value = "sentMsg",path="${providerContext}", method = RequestMethod.POST)
public JSONObject sentMsgToWeChat(JSONObject invoiceJson) ;
}

SpringCloud Feign context-path踩到的坑的更多相关文章

  1. 初学spring boot踩过的坑

    一.搭建spring boot环境 maven工程 pom文件内容 <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...

  2. 【转载】Fragment 全解析(1):那些年踩过的坑

    http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...

  3. CentOS7.2上用KVM安装虚拟机window10踩过的坑

    最近两个星期一直在琢磨kvm安装window10操作系统,并且通过桥接模式与外界通信,经历了九九八十一难,终于搞定.下面就记录以下我们在探索的过程中踩过的坑. 安装KVM 1. 系统要求:需要一台可以 ...

  4. wrk 使用记录及踩过的坑

    wrk是什么?https://github.com/wg/wrk wrk 是一个非常小巧高效的开源性能测试工具,支持lua脚本来创建复杂的测试场景.wrk 的一个很好的特性就是能用很少的线程压出很大的 ...

  5. vue项目开发中踩过的坑

    一.路由 这两天移动端的同事在研究vue,跟我说看着我的项目做的,子路由访问的时候是空白的,我第一反应是,不会模块没加载进来吧,还是....此处省略一千字... 废话不多说上代码 路由代码 { pat ...

  6. git工作中常用命令-工作中踩过的坑

    踩坑篇又来啦,这是我在工作中从git小白进化到现在工作中运用自如的过程中,踩过的坑,以及解决办法. 1.基于远程develop分支,建一个本地task分支,并切换到该task分支 git checko ...

  7. SpringCloud Feign 之 Fallback初体验

    SpringCloud Feign 之 Fallback初体验 在微服务框架SpringCloud中,Feign是其中非常重要且常用的组件.Feign是声明式,模板化的HTTP客户端,可以帮助我们更方 ...

  8. 创建优化的Go镜像文件以及踩过的坑

    在Docker上创建Go镜像文件并不困难,但建立的文件很大,接近1G,使用起来不太方便.Docker镜像的一个主要难题就是如何优化,创建小的镜像.我们可以用多级构建的方法来创建Docker镜像文件,它 ...

  9. 最细的eclipse 安装maven踩过的坑

    Eclipse安装maven插件踩过的坑 在线安装maven eclipse安装maven插件,在网上有各种各样的方法,博主使用过的也不止一种,但是留下的印象总是时好时不好,同样的方法也不确定那一次能 ...

  10. SpringCloud Feign通过FallbackFactory显示异常信息

    SpringCloud Feign可以进行服务消费,而且内置了Hystrix,能够进行熔断. Feign可以通过fallback指定熔断回调的类.代码示例及讲解可见: https://www.cnbl ...

随机推荐

  1. 基于Jmeter的 性能测试

    目标:对南通大学计算机学院网站开展性能测试:(url:http://cs.ntu.edu.cn/) 首先下载jmeter的zip压缩包,解压后进入bin目录,由于我使用的系统是win10,所以要双击执 ...

  2. CH5702 Count The Repetitions

    题意 5702 Count The Repetitions 0x50「动态规划」例题 描述 定义 conn(s,n) 为 n 个字符串 s 首尾相接形成的字符串,例如: conn("abc& ...

  3. 用我所学去讲C语言指针

    文章更新,更加详细的介绍请看这篇:https://www.cnblogs.com/lulipro/p/7460206.html 很多人不敢讲C的指针,有些人讲不清,有些人怕讲错.初生牛犊不怕虎,就让我 ...

  4. SQL 查询当天,本月,本周的记录

    SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT(Nvarchar, GETDATE(), 111)   ORDE ...

  5. delphi字符串分割

    function GetLeft(sText, sepStr: string): string; var p: Integer; begin p := Pos(sepStr, sText); then ...

  6. nginx 信号

    来源:nginx.cn Nginx信号控制 Nginx控制信号 TERM, INT 快速关闭 QUIT 从容关闭 HUP 重新加载,用新的配置开始新的工作进程 USER1 重新打开日志文件 USER2 ...

  7. Python【每日一问】05

    问:请解释一下Python 中的 pass 语句.continue.break有什么作用?并辅以代码说明 答: 1.pass :pass是空语句,是为了保持程序结构的完整性.通常用于不知道接下来代码应 ...

  8. 网络之TCP握手总结

    目录: 31.Tcp握手的一些问题? 21.Tcp三次握手及SYN攻击: 四次握手? 为什么建立连接是三次握手,而关闭连接却是四次挥手? 13.TCP释放连接四次握手 12.TCP建立连接三次握手 1 ...

  9. 三元运算&匿名函数lambda

    lambda # 语法: # 参数 : 返回值 # 1.不带参数的lambda表达式 def func(): return '开挂的人生不需要解释' func = lambda : '开挂的人上不需要 ...

  10. struts设置开发者模式

    struts设置开发者模式 在使用ssh框架做项目时,struts.xml文件总要配置许多项功能,其中一个就是开发者模式: <constant name="struts.devMode ...