美文网首页
spring cloud配置遇到的bean not found问

spring cloud配置遇到的bean not found问

作者: joecfan | 来源:发表于2018-05-12 14:38 被阅读0次

    写这篇笔记的原因是在配置微服务过程中,出现了如下错,原因很简单,但是因为不够熟悉困惑了一阵子。

    Field userFeignClient in cn.tearn.testa.demoa.DemoaController required a bean of type 'cn.tearn.demobsdk.restful.UserFeignClientB' that could not be found.

    Action:

    Consider defining a bean of type 'cn.tearn.demobsdk.restful.UserFeignClientB' in your configuration.

    场景:

    创建两个微服务,服务消费者demoa和服务提供者demob,书上或网上一些例子大部分把demob的FeignClient接口写在demoa工程里,这样服务消费者在使用的时候都写一遍FeignClient,这是很麻烦,也是很多余的事情。把FeignClient做为一个单独的module,那么消费者要用的时候直接添加依赖就可以了,具体内容就不写了,下面列出架构,如下图:

    服务消费额者:

    这个module里也加了调用服务提供者的FeignClient(UserFeignClient),不用的,不推荐。

    服务提供者:

    服务提供者之FeignClient:

    demoa添加demob-sdk以后之后,

    在Controller里直接注入UserFeignClientB,demoa工程在启动的时候文章开头的错,

    启动异常:

    Field userFeignClient in cn.tearn.testa.demoa.DemoaController required a bean of type 'cn.tearn.demobsdk.restful.UserFeignClientB' that could not be found.

    Action:

    Consider defining a bean of type 'cn.tearn.demobsdk.restful.UserFeignClientB' in your configuration.

    在deomoaApplication加了@ComponetScan扫描cn.tearn.demobsdk.restful,不行!改成@EnableFeignClients({"cn.tearn.demobsdk.restful"})就ok了,不加这两个注解导致的错误信息是一样的,原因可是不一样。回想上面demoa贴图里也有一个FeignClient类,为什么启动没问题也能调通呢?因为我在demoaApplication加了@EnableFeignClients,它能扫到当前所在的包。

    这样虽然问题解决了,但是需要每个消费者都需要写一遍还是比较麻烦的,另外一种做法就是配置写在demobsdk里。

    在demobsdk moudle的META-INF下添加spring.factories文件(直接放在rescources下也一样),内容:

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\

      cn.tearn.demobsdk.sdkConfig

    sdkConfig.java里加上一句@EnableFeignClients({"cn.tearn.demobsdk.restful"})就可以了,如下图:

    相关文章

      网友评论

          本文标题:spring cloud配置遇到的bean not found问

          本文链接:https://www.haomeiwen.com/subject/odacdftx.html