传统Spring项目使用
这里的传统 项目指的是没有使用 的 项目,例如
api 文件
和在spring cloud 项目中使用 一样,不过这里在注解上加上了 配置, 注意这里 url 不要写死,采用占位符的形式,通过spring属性进行配置
其中通过动态配置 url 来实现在 spring cloud 外部调用接口
FeignClient注解源码
在源码中可以看到比较有用的四个注解 , , ,
name 指定微服务的实例名称,唯一,必填,通过实例名称可以得到实例对应的访问地址
fallback 配置熔断
url 配置一个绝对的地址访问,默认为空字符串,当其不空时,则使用该地址访问
path 配置一个所有方法级别的mappings 相当于在类上加 requestMapping, 例如上面的 所有访问地址为 /user/xxx
注意: 请求路径和 无关,
如果想访问以上地址,api 有三种实现方式
在所有的方法上写明全路径 例如 @RequestMapping("/user/xxx1")
在类上写 @RequestMapping("user") 在对应方法写 @RequestMapping("xxx1")
使用 FeignClient 的 path 标注
配置
如果使用非 spring cloud,则应该在 api 的 FeignClient 注解上设置 url,例如例子程序
在项目配置 properties 文件,这里我使用 server.properties
下面是我测试的时候自己起的网关地址
server.properties
这里配置的 spring mvc 项目,配置servlet 主要为了加载web.xml
application.xml
这里主要为了加载属性文件
添加配置类
EnableFeignClients 设置对应的 api 路径,可设置多个,其中要配置一个 用来解码,可设置其他
测试
userServiceAPI直接注入即可
对应pom文件
小结
为了测试方便,这里使用了 springmvc 项目,同时引入一个 spring cloud 项目中已经写好的 feignclient 的 api,通过测试 springmvc 能否调通 feignclient 定义的接口来确定测试是否成功,在引入 feignclient 的依赖时,去除了 eureka 的依赖,起初我在配置 application.xml 时,添加了 mvc 的HttpMessageConverters 的支持,当我调用 feignclient 一直报错,提示我找不到 HttpMessageConverters 的bean,很苦恼,明明配置了HttpMessageConverters 为什么还注入不进入,最后直接 创建了一个 bean 这才成功,通过使用这种方式,可以在原来 ssm 或 ssh 项目结构不改变的情况下,使用 spring cloud 提供的 feignclient ,调用其他服务的接口,减小升级成本和风险
怕什么真理无穷,近一寸有一寸的欢喜
领取专属 10元无门槛券
私享最新 技术干货