Spring cloud: Запрашиваемый компонент находится в процессе создания: существует неразрешимая круговая ссылка? - PullRequest
0 голосов
/ 25 июня 2018

У меня есть приложение, в которое я хотел бы добавить Spring Cloud Netlix Eureka.

Я добавил это обнаружение службы в 2 другие службы без проблем. В третьем сервисе, который является более сложным, после добавления:

Зависимость весеннего облака

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

bootstrap.properties, с именем приложения

spring.application.name=my-app

Eureka связанная конфигурация в application.properties

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.instance.instance-id=${spring.application.name}:${random.int}
eureka.instance.hostname=localhost

Включение клиента Eureka с аннулированием в классе Application

@EnableEurekaClient

После этого при запуске приложения я получаю следующую ошибку:

2018-06-25 18:22:31.229 ERROR 7862 --- [ost-startStop-1] o.s.b.web.embedded.tomcat.TomcatStarter  : Error starting Tomcat context. Exception: org.springframework.beans.factory.BeanCreationException. Message: Error creating bean with name 'servletEndpointRegistrar' defined in class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/ServletEndpointManagementContextConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.actuate.endpoint.web.ServletEndpointRegistrar]: Factory method 'servletEndpointRegistrar' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'healthEndpoint' defined in class path resource [org/springframework/boot/actuate/autoconfigure/health/HealthEndpointConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.actuate.health.HealthEndpoint]: Factory method 'healthEndpoint' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.jdbc.DataSourceHealthIndicatorAutoConfiguration': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.actuate.autoconfigure.jdbc.DataSourceHealthIndicatorAutoConfiguration$$EnhancerBySpringCGLIB$$f4aa1064]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Post-processing of FactoryBean's singleton object failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker': Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Post-processing of FactoryBean's singleton object failed; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'scopedTarget.dataSource': Requested bean is currently in creation: Is there an unresolvable circular reference?

Я не уверен, почему так или иначе возникает проблема с созданием источника данных. Единственное отличие от других сервисов заключается в том, что он подключается к базе данных postgres.

Я определил проблему здесь, в классе «DataSourceHealthIndicatorAutoConfiguration»:

enter image description here

Однако я до сих пор не уверен, почему только с весенним облаком на пути к классам.

Кроме того, я сомневаюсь, что это связано, так как удаление этого не устраняет проблему, но я также добавил новый Бин:

@LoadBalanced
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
  return builder.build();
}

И используется так же в классе:

private final RestTemplate restTemplate;

@Autowired
public AudienceConsoleAudienceFetcher(RestTemplate restTemplate) {
  this.restTemplate = restTemplate;
}

Это заменяет то, что я имел в том же классе:

private RestTemplate restTemplate = new RestTemplate();

Edit:

Вот класс pom.xml и Application: https://gist.github.com/nWidart/1f3a635d6d392afe68d09603c260ed04

Спасибо!

...