Merge branch '2.2.x'

# Conflicts:
#	spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/loadbalancer/EurekaLoadBalancerClientConfiguration.java
This commit is contained in:
Olga Maciaszek-Sharma
2020-02-04 19:45:45 +01:00
3 changed files with 25 additions and 20 deletions

View File

@@ -25,11 +25,14 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerProperties;
import org.springframework.cloud.loadbalancer.config.LoadBalancerZoneConfig;
import org.springframework.cloud.netflix.eureka.support.ZoneUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import static org.springframework.cloud.netflix.eureka.loadbalancer.LoadBalancerEurekaAutoConfiguration.LOADBALANCER_ZONE;
/**
* A configuration for Spring Cloud LoadBalancer that retrieves client instance zone from
* Eureka and sets it as a property. Based on
@@ -40,11 +43,9 @@ import org.springframework.util.StringUtils;
* @see EurekaLoadBalancerClientConfiguration
*/
@Configuration
@ConditionalOnBean({ LoadBalancerProperties.class, EurekaLoadBalancerProperties.class })
@ConditionalOnBean({ LoadBalancerZoneConfig.class, EurekaLoadBalancerProperties.class })
public class EurekaLoadBalancerClientConfiguration {
private static final String LOADBALANCER_ZONE = "spring.cloud.loadbalancer.zone";
private static final Log LOG = LogFactory
.getLog(EurekaLoadBalancerClientConfiguration.class);
@@ -52,24 +53,24 @@ public class EurekaLoadBalancerClientConfiguration {
private final EurekaInstanceConfig eurekaConfig;
private final LoadBalancerProperties loadBalancerProperties;
private final LoadBalancerZoneConfig zoneConfig;
private final EurekaLoadBalancerProperties eurekaLoadBalancerProperties;
public EurekaLoadBalancerClientConfiguration(
@Autowired(required = false) EurekaClientConfig clientConfig,
@Autowired(required = false) EurekaInstanceConfig eurekaInstanceConfig,
LoadBalancerProperties loadBalancerProperties,
LoadBalancerZoneConfig zoneConfig,
EurekaLoadBalancerProperties eurekaLoadBalancerProperties) {
this.clientConfig = clientConfig;
this.eurekaConfig = eurekaInstanceConfig;
this.loadBalancerProperties = loadBalancerProperties;
this.zoneConfig = zoneConfig;
this.eurekaLoadBalancerProperties = eurekaLoadBalancerProperties;
}
@PostConstruct
public void postprocess() {
if (!StringUtils.isEmpty(loadBalancerProperties.getZone())) {
if (!StringUtils.isEmpty(zoneConfig.getZone())) {
return;
}
String zone = getZoneFromEureka();
@@ -77,7 +78,7 @@ public class EurekaLoadBalancerClientConfiguration {
if (LOG.isDebugEnabled()) {
LOG.debug("Setting the value of '" + LOADBALANCER_ZONE + "' to " + zone);
}
loadBalancerProperties.setZone(zone);
zoneConfig.setZone(zone);
}
}

View File

@@ -18,13 +18,13 @@ package org.springframework.cloud.netflix.eureka.loadbalancer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerProperties;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientConfigurationRegistrar;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
import org.springframework.cloud.loadbalancer.config.LoadBalancerZoneConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
/**
* An Autoconfiguration that loads default config for Spring Cloud LoadBalancer clients.
@@ -39,6 +39,11 @@ import org.springframework.context.annotation.Configuration;
@LoadBalancerClients(defaultConfiguration = EurekaLoadBalancerClientConfiguration.class)
public class LoadBalancerEurekaAutoConfiguration {
/**
* Spring Cloud LoadBalancer Zone property name.
*/
public static final String LOADBALANCER_ZONE = "spring.cloud.loadbalancer.zone";
@Bean
@ConditionalOnMissingBean
EurekaLoadBalancerProperties eurekaLoadBalancerProperties() {
@@ -47,9 +52,8 @@ public class LoadBalancerEurekaAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConfigurationProperties("spring.cloud.loadbalancer")
LoadBalancerProperties loadBalancerProperties() {
return new LoadBalancerProperties();
LoadBalancerZoneConfig zoneConfig(Environment environment) {
return new LoadBalancerZoneConfig(environment.getProperty(LOADBALANCER_ZONE));
}
}

View File

@@ -18,9 +18,9 @@ package org.springframework.cloud.netflix.eureka.loadbalancer;
import org.junit.jupiter.api.Test;
import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerProperties;
import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.cloud.commons.util.InetUtilsProperties;
import org.springframework.cloud.loadbalancer.config.LoadBalancerZoneConfig;
import org.springframework.cloud.netflix.eureka.EurekaClientConfigBean;
import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean;
@@ -38,12 +38,12 @@ class EurekaLoadBalancerClientConfigurationTests {
private EurekaInstanceConfigBean eurekaInstanceConfig = new EurekaInstanceConfigBean(
new InetUtils(new InetUtilsProperties()));
private LoadBalancerProperties loadBalancerProperties = new LoadBalancerProperties();
private LoadBalancerZoneConfig zoneConfig = new LoadBalancerZoneConfig(null);
private EurekaLoadBalancerProperties eurekaLoadBalancerProperties = new EurekaLoadBalancerProperties();
private EurekaLoadBalancerClientConfiguration postprocessor = new EurekaLoadBalancerClientConfiguration(
eurekaClientConfig, eurekaInstanceConfig, loadBalancerProperties,
eurekaClientConfig, eurekaInstanceConfig, zoneConfig,
eurekaLoadBalancerProperties);
@Test
@@ -52,14 +52,14 @@ class EurekaLoadBalancerClientConfigurationTests {
postprocessor.postprocess();
assertThat(loadBalancerProperties.getZone()).isEqualTo("myZone");
assertThat(zoneConfig.getZone()).isEqualTo("myZone");
}
@Test
public void shouldSetZoneToDefaultWhenNotSetInMetadata() {
postprocessor.postprocess();
assertThat(loadBalancerProperties.getZone()).isEqualTo("defaultZone");
assertThat(zoneConfig.getZone()).isEqualTo("defaultZone");
}
@Test
@@ -69,7 +69,7 @@ class EurekaLoadBalancerClientConfigurationTests {
postprocessor.postprocess();
assertThat(loadBalancerProperties.getZone()).isEqualTo("is.a.test.com");
assertThat(zoneConfig.getZone()).isEqualTo("is.a.test.com");
}
}