Java 如何推迟Spring应用程序';在申请完全初始化之前,是否在Eureka注册?
在我的Spring应用程序中,我想在注册到Eureka之前在Java 如何推迟Spring应用程序';在申请完全初始化之前,是否在Eureka注册?,java,spring,spring-boot,netflix-eureka,service-discovery,Java,Spring,Spring Boot,Netflix Eureka,Service Discovery,在我的Spring应用程序中,我想在注册到Eureka之前在ApplicationReadyEvent侦听器中做一些准备工作(例如,预热缓存)。问题是,我的应用程序在完成整个准备工作之前就可以在Eureka中访问其他应用程序,这可能会在以后导致一些问题 不幸的是,我找不到任何方便的方法将注册推迟到应用程序完全初始化 我所尝试的: 我将eureka.instance.initial status设置为除“up”(即“starting”)之外的任何值,但正如我所意识到的,eureka的health
ApplicationReadyEvent
侦听器中做一些准备工作(例如,预热缓存)。问题是,我的应用程序在完成整个准备工作之前就可以在Eureka中访问其他应用程序,这可能会在以后导致一些问题
不幸的是,我找不到任何方便的方法将注册推迟到应用程序完全初始化
我所尝试的:
- 我将
设置为除“up”(即“starting”)之外的任何值,但正如我所意识到的,eureka的healthcheck在eureka.instance.initial status
之前就开始发挥作用,并将当前状态设置为“up”。在这种情况下,我可以通过ContextRefreshedEvent
禁用healthcheck,但稍后我必须在eureka.client.healthcheck.enabled=false
时创建ApplicationReadyEvent
bean,然后手动将其注册到应用程序上下文中EurekaHealthCheckHandler
- 另一种方法是设置
。在这种情况下,注册似乎是在稍后(在所有我的spring.cloud.service-registry.auto-registration.enabled=false
侦听器之后)导致的,但是ApplicationReadyEvent
bean不是自动创建的,因此我已经完成了再次手动创建(稍后需要为应用程序创建)EurekaRegistration
- 我还使用了
interval属性(例如eureka.*
)。在这种情况下,你需要能够预测最后的准备时间,在我看来,这是不可靠的eureka.initialInstanceInfoReplicationIntervalSeconds
提前感谢。是否将
instanceEnabledOnit
设置为false,初始状态为OUT\u OF\u SERVICE
,然后在应用程序启动后将状态显式设置为UP,以解决您的问题 不幸的是,没有,因为healthcheck的早期初始化(状态几乎立即从“out_of_service”更改为“up”)<代码>实例启用默认为false。