нечеткая циклическая зависимость с загрузкой FeignClient и Spring

Мое приложение 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 даже нет членов .. (fign auto генерирует его), так как же он может зависеть от Listener? !!

в чем проблема??

Спасибо за помощь


person nadavgam    schedule 25.07.2019    source источник


Ответы (2)


Итак, проблема была в ApplicationListener (не знаю почему). Использование @EventListener решило проблему.

@EventListener
    public void onApplicationEvent(ContextRefreshedEvent event)
    {
      gnsFlowInitator.startClient(event);
    }
person nadavgam    schedule 25.07.2019

Проблема зависит от фазы вашего контекста, после того, как ваш контекст инициализирован или изменяется, происходит вызов обновления, поэтому ваше событие будет запущено, если вам нужно выполнить свой startClient после полной инициализации вашего контекста, тогда вы @EventListener будет триггером с ContextStartedEvent, который вызывается только после того, как контекст вашего приложения был полностью инициализирован, поэтому feign уже загружен.

Надеюсь, это может быть полезно.

person elioth010    schedule 20.01.2020