Unable to provide different values of spring.config.import.configserver since 2020.0.4 #2011 (#2037)

This commit is contained in:
Sergii Chekotylo
2022-02-22 11:04:32 -05:00
committed by GitHub
parent a697670e2f
commit cee78ddd86
2 changed files with 26 additions and 5 deletions

View File

@@ -23,6 +23,7 @@ import java.util.Properties;
import org.apache.commons.logging.Log;
import org.springframework.beans.BeanUtils;
import org.springframework.boot.BootstrapRegistry.InstanceSupplier;
import org.springframework.boot.ConfigurableBootstrapContext;
import org.springframework.boot.context.config.ConfigDataLocation;
@@ -69,7 +70,8 @@ public class ConfigServerConfigDataLocationResolver
ConfigClientProperties configClientProperties;
if (context.getBootstrapContext().isRegistered(ConfigClientProperties.class)) {
configClientProperties = context.getBootstrapContext().get(ConfigClientProperties.class);
configClientProperties = new ConfigClientProperties();
BeanUtils.copyProperties(context.getBootstrapContext().get(ConfigClientProperties.class), configClientProperties);
}
else {
configClientProperties = binder

View File

@@ -180,6 +180,27 @@ public class ConfigServerConfigDataLocationResolverTests {
assertThat(resource.getProperties().getUri()).isEqualTo(new String[] { "http://locationuri" });
}
@Test
void multipleImportEntriesDoesNotShareSameURIs() {
ConfigurableBootstrapContext bootstrapContext = mock(ConfigurableBootstrapContext.class);
when(bootstrapContext.isRegistered(eq(ConfigClientProperties.class))).thenReturn(true);
ConfigClientProperties configClientProperties = new ConfigClientProperties();
configClientProperties.setUri(new String[] { "http://myuri" });
when(bootstrapContext.get(eq(ConfigClientProperties.class))).thenReturn(configClientProperties);
when(context.getBootstrapContext()).thenReturn(bootstrapContext);
List<ConfigServerConfigDataResource> resources1 = this.resolver.resolveProfileSpecific(context,
ConfigDataLocation.of("configserver:http://urlNo1"), mock(Profiles.class));
List<ConfigServerConfigDataResource> resources2 = this.resolver.resolveProfileSpecific(context,
ConfigDataLocation.of("configserver:http://urlNo2"), mock(Profiles.class));
assertThat(resources1).hasSize(1);
assertThat(resources2).hasSize(1);
verify(bootstrapContext, times(2)).get(eq(ConfigClientProperties.class));
ConfigServerConfigDataResource resource1 = resources1.get(0);
assertThat(resource1.getProperties().getUri()).isEqualTo(new String[] { "http://urlNo1" });
ConfigServerConfigDataResource resource2 = resources2.get(0);
assertThat(resource2.getProperties().getUri()).isEqualTo(new String[] { "http://urlNo2" });
}
private ConfigServerConfigDataResource testUri(String propertyUri, String locationUri) {
this.environment.setProperty(ConfigClientProperties.PREFIX + ".uri", propertyUri);
when(context.getBootstrapContext()).thenReturn(mock(ConfigurableBootstrapContext.class));
@@ -187,8 +208,7 @@ public class ConfigServerConfigDataLocationResolverTests {
List<ConfigServerConfigDataResource> resources = this.resolver.resolveProfileSpecific(context,
ConfigDataLocation.of("configserver:" + locationUri), profiles);
assertThat(resources).hasSize(1);
ConfigServerConfigDataResource resource = resources.get(0);
return resource;
return resources.get(0);
}
private ConfigServerConfigDataResource testResolveProvileSpecific() {
@@ -205,8 +225,7 @@ public class ConfigServerConfigDataLocationResolverTests {
List<ConfigServerConfigDataResource> resources = this.resolver.resolveProfileSpecific(context,
ConfigDataLocation.of("configserver:"), profiles);
assertThat(resources).hasSize(1);
ConfigServerConfigDataResource resource = resources.get(0);
return resource;
return resources.get(0);
}
}