第一次做一个完整的SpringCloud微服务项目,踩了好多好多坑,都记录下来!
创建一个openfeign服务,并把它注册到nacos上去
然后A模块通过Feign调用B模块
但是我在A模块实现AdminArticleServiceFeignClient这个接口,报错:
后面我查找这个问题终于找到了答案, 在A模块的启动类上加上
@EnableFeignClients(basePackages = "com.XXXX.feign.api")
com.XXXX.feign.api, 这个路径就是我openfeign的接口包路径,
为什么会这样?
当你在 A 模块的启动类上使用 @EnableFeignClients(basePackages = “com.headnews.feign.api”) 时,Spring Cloud Feign 会扫描指定包及其子包下的所有 Feign 客户端接口,然后自动创建这些接口的代理对象。
如果你没有在启动类上使用 @EnableFeignClients 注解,Feign 将不会扫描和创建 Feign 客户端的代理对象,导致在 A 模块中找不到 AdminArticleServiceFeignClient。
和你单模块使用openfeign一样,只是在使用多模块的时候没适应,一下子没反应过来
简而言之,@EnableFeignClients 注解告诉 Spring Cloud Feign 哪些包中包含 Feign 客户端接口,以便进行扫描和代理的创建。
这第二阶段 ,真的很tm折磨人,让我有点想放弃这个行业的冲动!
A模块由于要调用openfeign的服务,所以A的pom.xml上有依赖openfeign的服务,然后我在启动的时候莫名其妙的报错,说我的数据源有问题
Consider the following:
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active)
我起初认为是openfeign上的依赖有依赖到需要数据库连接配置的服务,结果openfeign服务正常启动反而是A模块的服务启动失败
我在推测是不是A模块和openfeign服务模块的依赖起冲突了,由于这个问题已经弄了很久了,我不想在这个问题在浪费时间了, 我就索性把openfeign服务模块的所有依赖全部排除!
结果还是报一模一样的错 , 最后我又查了半个小时, 没办法我妥协了向bug妥协,我选择给openfeign服务模块的配置文件加上数据库连接信息,我想这下总没有问题了吧,postman测试,gateway报错(因为我的网络请求要统一经过gateway),gateway报错说找不到请求链的服务。嗯???找不到服务?
网关的职责说简单一点不就是鉴权和统一管理吗,没有报鉴权的错,说我请求链出问题,找不到服务, 那只能是gateway转发出问题了, 在去单独调用A模块的服务,结果好家伙A服务tm消失了
开始汗流浃背了, A服务搁那跑着呢,你和我说这个localhost+端口都访问不出来,开始蒙圈了,排错到这里整个人已经开始怀疑人生了
开始各种查依赖,各种查tomcat冲突,什么都查,瞎几把,结果在我准备放弃,转行的时候,发现这个A服务的端口怎么tm变成openfeign的端口了???
在那一瞬间我逐渐理解了一切, 我说怎么报错数据源错误,原来是引导属性源给我找错了, A模块的引导属性源给我找到openfeign模块上去了,通了为什么我在openfeign上加数据库配置就不报错了,但是找不到A模块的服务,原来根本那个时候就不存在A模块, 那么是什么原因导致的呢?
很简单,我的tm openfeign服务模块的配置文件是:application.yml,而我的A服务模块,因为走了nacos配置中心所以,A模块的配置文件是:bootstrap.yml
所以,要么我在A模块底下搞一个:application.yml, 要么我把openfeign服务模块的配置文件名称改为:bootstrap.yml就OK了
好了整个排错就到这里结束了
有没有懂哥解释一下为什么,spring会找到两个引导源啊