Java 如何推迟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

在我的Spring应用程序中,我想在注册到Eureka之前在
ApplicationReadyEvent
侦听器中做一些准备工作(例如,预热缓存)。问题是,我的应用程序在完成整个准备工作之前就可以在Eureka中访问其他应用程序,这可能会在以后导致一些问题

不幸的是,我找不到任何方便的方法将注册推迟到应用程序完全初始化

我所尝试的:

  • 我将
    eureka.instance.initial status
    设置为除“up”(即“starting”)之外的任何值,但正如我所意识到的,eureka的healthcheck在
    ContextRefreshedEvent
    之前就开始发挥作用,并将当前状态设置为“up”。在这种情况下,我可以通过
    eureka.client.healthcheck.enabled=false
    禁用healthcheck,但稍后我必须在
    ApplicationReadyEvent
    时创建
    EurekaHealthCheckHandler
    bean,然后手动将其注册到应用程序上下文中
  • 另一种方法是设置
    spring.cloud.service-registry.auto-registration.enabled=false
    。在这种情况下,注册似乎是在稍后(在所有我的
    ApplicationReadyEvent
    侦听器之后)导致的,但是
    EurekaRegistration
    bean不是自动创建的,因此我已经完成了再次手动创建(稍后需要为应用程序创建)
  • 我还使用了
    eureka.*
    interval属性(例如
    eureka.initialInstanceInfoReplicationIntervalSeconds
    )。在这种情况下,你需要能够预测最后的准备时间,在我看来,这是不可靠的
因此,无论何时,您都需要正确设置一组属性,然后手动创建和配置许多内容。对于(我认为)这项普通任务来说相当麻烦

有没有更好的办法?也许我遗漏了什么,而解决方案就在表面上

我在SpringCloudGreenwich上使用SpringBoot2.1.9


提前感谢。

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

不幸的是,没有,因为healthcheck的早期初始化(状态几乎立即从“out_of_service”更改为“up”)<代码>实例启用默认为false。