FeignClient和Spring Boot不清楚循环依赖

时间:2019-07-25 09:56:09

标签: spring-boot spring-cloud-feign

我的springboot应用程序运行良好,直到我添加以下类:

@Service
@RequiredArgsConstructor
public class AutoopsClientPostBootListener implements ApplicationListener<ContextRefreshedEvent>
{
    private final IAutoOpsGnsFlowInitiator gnsFlowInitator;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event)
    {
      gnsFlowInitator.startClient(event);
    }
}

在那之后,由于某种奇怪的原因,我收到了一个循环依赖错误,该错误源自 虚假客户端依赖于上方的 AutoopsClientPostBootListener

发生这种情况是因为IAutoOpsGnsFlowInitiator依赖于依赖于AutoopsClientPostBootListener的伪客户端。但是FeignClient甚至没有任何成员..(伪装自动生成它),那么它如何依赖于侦听器呢?!

出什么问题了?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

所以问题出在ApplicationListener上(不知道为什么)。 使用@EventListener解决了问题。

@EventListener
    public void onApplicationEvent(ContextRefreshedEvent event)
    {
      gnsFlowInitator.startClient(event);
    }

答案 1 :(得分:0)

问题取决于上下文的阶段,一旦上下文被初始化或更改,就会调用刷新,因此将触发您的事件,如果您需要在上下文完全初始化后执行startClient,则{ {1}}将由@EventListener触发,只有在您的应用程序上下文被完全初始化以致伪装已经被加载时,才会调用{1}。

希望这会有所帮助。