Исключение переопределения определения компонента при централизации микросервисов с использованием JHipster-Registry (сервер облачной конфигурации в качестве центрального сервера)

#spring-boot #jhipster #jhipster-registry #jhipster-gateway

#spring-boot #jhipster #jhipster-registry #jhipster-gateway

Вопрос:

В настоящее время я сталкиваюсь с проблемой при централизации конфигурации клиента микросервиса в JHipster-registry. Я использую подход файловой системы для централизации папки конфигурации (central-config) приложения реестра.

Во время запуска клиентских приложений микросервиса во время выполнения я получаю это исключение, как показано ниже

 
        ██╗ ██╗   ██╗ ████████╗ ███████╗   ██████╗ ████████╗ ████████╗ ███████╗
        ██║ ██║   ██║ ╚══██╔══╝ ██╔═══██╗ ██╔════╝ ╚══██╔══╝ ██╔═════╝ ██╔═══██╗
        ██║ ████████║    ██║    ███████╔╝ ╚█████╗     ██║    ██████╗   ███████╔╝
  ██╗   ██║ ██╔═══██║    ██║    ██╔════╝   ╚═══██╗    ██║    ██╔═══╝   ██╔══██║
  ╚██████╔╝ ██║   ██║ ████████╗ ██║       ██████╔╝    ██║    ████████╗ ██║  ╚██╗
   ╚═════╝  ╚═╝   ╚═╝ ╚═══════╝ ╚═╝       ╚═════╝     ╚═╝    ╚═══════╝ ╚═╝   ╚═╝

:: JHipster ?  :: Running Spring Boot 2.1.6.RELEASE ::
:: https://www.jhipster.tech ::

2020-09-14 12:09:12.061  INFO 3828 --- [  restartedMain] c.t.g.GlueResourceDataServiceApp         : The following profiles are active: dev
2020-09-14 12:09:16.314  WARN 3828 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'processorStorageGateway' defined in null: Cannot register bean definition [Generic bean: class [org.springframework.integration.gateway.GatewayProxyFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'processorStorageGateway': There is already [Generic bean: class [org.springframework.integration.gateway.GatewayProxyFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] bound.
2020-09-14 12:09:16.342 ERROR 3828 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   :

***************************
APPLICATION FAILED TO START
***************************

Description:

The bean 'processorStorageGateway', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

  

Я попробовал подход, подобный использованию свойства в папке central-config приложения registry, файле .yml (который содержит центральную конфигурацию для клиентского приложения)

 spring:
    
    main:
        allow-bean-definition-overriding: true
  

но пока безуспешно.
Я попытался определить аннотацию @Service также в интерфейсе, внедрение компонента которого завершается с ошибкой, указанной выше, как показано ниже

 @MessagingGateway
@Service
public interface ProcessorStorageGateway { 
..... }

  

Я видел два файла ссылочного класса, которые используют этот интерфейс для автоматического подключения
FailJobscheduler и ExternalQueuelistener, которые пытаются внедрить этот компонент ‘processorGateway’ типа interface во время выполнения, переименование их свойства autowiring также не помогает решить проблему, как указано ниже

 @Component
public class FailJobsScheduler {

    private final Logger log = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JobService jobService;

    @Autowired
    private ProcessorStorageGateway processorStorageGateway;
............
}

@Service
public class ExternalQueueListener {

    private final Logger log = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private ProcessorStorageGateway processorStorageGateway;
.....
}

  

В настоящее время застрял в этой проблеме, поскольку переопределение компонента Spring Boot-2.1 и далее по умолчанию не разрешено во время выполнения.
Вышеупомянутый хит и пробная версия, упомянутые в начале, также не помогли. Кто-нибудь может помочь советом по этой проблеме и наилучшим способом ее решения?

Ответ №1:

Вышеупомянутая проблема была решена путем исключения некоторых дублирующихся аннотаций Spring, которые уже присутствовали в project, во время дальнейшего расследования, такого как @Configuration и т. Д., А также в основном классе приложения Spring-BOOT, путем упоминания проверки компонентов для выполнения для соответствующих пакетов. помогите решить проблему