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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user