[在我的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一起使用。
提前感谢。
将instanceEnabledOnit
设置为false,初始状态为OUT_OF_SERVICE
,然后在应用程序启动后将状态显式设置为UP是否可以解决您的问题?