Ribbon - 负载平衡流程中提到,serviceId对应的AnnotationConfigApplicationContext在第一次调用的时候才创立(所以叫懒加载),那有可能造成调用的超时,那有没有方法提前加载呢?
在RibbonAutoConfiguration类中,有个RibbonApplicationContextInitializer,如果不须要懒加载,咱们就须要ribbon.eager-load.enabled的值为true。

@Bean@ConditionalOnProperty("ribbon.eager-load.enabled")public RibbonApplicationContextInitializer ribbonApplicationContextInitializer() {    return new RibbonApplicationContextInitializer(springClientFactory(),            ribbonEagerLoadProperties.getClients());}

RibbonApplicationContextInitializer是实现ApplicationListener<ApplicationReadyEvent>,所以当上下文筹备好的时候,就会调用onApplicationEvent办法,而后持续调用initialize办法,所以咱们并不是说ribbon.eager-load.enabled的值设置true就能够的,还须要设置clientNames。

protected void initialize() {    if (clientNames != null) {        for (String clientName : clientNames) {            this.springClientFactory.getContext(clientName);        }    }}

为了去掉懒加载,我的配置如下,clients能够是多个:

ribbon:  eager-load:    enabled: true    clients: eureka-provider