升級Spring Cloud到Finchley後的一點坑

weixin_34148340發表於2018-05-10

最近為了使用Kotlin以及Webflux進行後臺應用開發,把Spring Cloud版本升級到了Finchley。

這種大版本的提升,坑自然是少不了的,我最近會把遇到問題都總結在這裡避免大家花太多時間在排坑上:

  1. Failed to bind properties under 'eureka.instance.instance-id' to java.lang.String:
Description:

Failed to bind properties under 'eureka.instance.instance-id' to java.lang.String:

    Property: eureka.instance.instance-id
    Value: ${spring.cloud.client.ipAddress}:${spring.application.name}:${spring.application.instance_id:${server.port}}
    Origin: "eureka.instance.instance-id" from property source "bootstrapProperties"
    Reason: Could not resolve placeholder 'spring.cloud.client.ipAddress' in value "${spring.cloud.client.ipAddress}:${spring.application.name}:${spring.application.instance_id:${server.port}}"

spring.cloud.client.ipAddress這個引數已經不能被識別了

我們來看看原始碼:

# org.springframework.cloud.client.HostInfoEnvironmentPostProcessor

@Override
    public void postProcessEnvironment(ConfigurableEnvironment environment,
            SpringApplication application) {
        InetUtils.HostInfo hostInfo = getFirstNonLoopbackHostInfo(environment);
        LinkedHashMap<String, Object> map = new LinkedHashMap<>();
        map.put("spring.cloud.client.hostname", hostInfo.getHostname());
        map.put("spring.cloud.client.ip-address", hostInfo.getIpAddress());
        MapPropertySource propertySource = new MapPropertySource(
                "springCloudClientHostInfo", map);
        environment.getPropertySources().addLast(propertySource);
    }

發現原來的ipAddress已經改為ip-address,那麼我們在配置中心做相應的改正即可。

注:改為ip-address不會對之前的老版本的專案產生影響,會自動解析並正確賦值

未完待續,後面再慢慢總結。

相關文章