最近在使用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) ;
}

最新文章

  1. asp.net gridview动态添加列,并获取其数据;
  2. Flappy Bird (Java实现)
  3. spring websocket源码分析
  4. [Java] java中的异常处理
  5. iOS runtime 运行时( - )
  6. javascript之高级函数应用思想
  7. Linux TCP队列相关参数的总结
  8. 告诉你GetDC()没有释放造成的后果
  9. Git详细教程---多人协作开发
  10. linux系统下手动安装Angular-cli
  11. Python多进程----从入门到放弃
  12. Spark Streaming 快速入门
  13. 想在Java中实现Excel和Csv的导出吗?看这就对了
  14. Android为TV端助力 android 在5.0以后不允许使用隐式Intent方式来启动Service
  15. openvon安装
  16. PL/SQL学习笔记之日期时间
  17. sql重置标识
  18. [AI]神经网络章3 损失函数
  19. CGLIB介绍
  20. nyist oj 214 单调递增子序列(二) (动态规划经典)

热门文章

  1. mongo 索引,速度
  2. Go语言开发Windows应用
  3. lvm基本管理
  4. [zz]LyX中文问题
  5. STM32定时器时间的计算方法
  6. mysql中的锁
  7. 【rocketMQ】之centos6.9安装RocketMQ4.2
  8. Windows不要使用记事本编辑文本文件
  9. centos7如何使用yum命令
  10. jenkins 找插件下载的方法