如何在Eureka中推迟Spring应用程序的注册,直到应用程序完全初始化?

问题描述 投票:0回答:1

[在我的Spring应用程序中,我想在ApplicationReadyEvent侦听器中做一些准备工作(例如,预热缓存),然后再在Eureka中进行注册。问题是在完成整个准备工作之前,我的应用程序已在Eureka中可供其他应用程序访问,这可能在以后引起一些问题。

[不幸的是,在完全初始化应用程序之前,我找不到任何方便的方法来推迟注册。

我尝试过的:

  • 我将eureka.instance.initial-status设置为除“ up”以外的任何值(例如,设置为“ starting”),但据我所知,Eureka的运行状况检查起作用,并且甚至在ContextRefreshedEvent左右之前将当前状态设置为“ up”。在这种情况下,我可以通过eureka.client.healthcheck.enabled = false禁用运行状况检查,但是稍后我必须在EurekaHealthCheckHandler时创建ApplicationReadyEvent bean,然后将其手动注册到应用程序上下文中。
  • 另一种方法是设置spring.cloud.service-registry.auto-registration.enabled = false。看来是在这种情况下稍后导致了注册(在我所有的ApplicationReadyEvent侦听器之后),但是EurekaRegistration bean并不是自动创建的,因此我已经完成了再次手动创建的操作(稍后将需要该应用程序)。
  • 此外,我还玩过eureka.*间隔属性(例如eureka.initialInstanceInfoReplicationIntervalSeconds)。在这种情况下,您需要能够预测准备工作的最终时间,我认为这是不可靠的。

因此,任何时候您都需要正确设置一堆属性,然后手动创建和配置很多东西。 (我认为)完成常见任务非常麻烦。

还有更好的方法吗?也许我缺少了某些东西,解决方案浮出水面?

我正在将Spring Boot 2.1.9与Spring Cloud Greenwich一起使用。

提前感谢。

java spring spring-boot netflix-eureka service-discovery
1个回答
0
投票

instanceEnabledOnit设置为false,初始状态为OUT_OF_SERVICE,然后在应用程序启动后将状态显式设置为UP是否可以解决您的问题?

© www.soinside.com 2019 - 2024. All rights reserved.