Merge branch '3.0.x' into main

This commit is contained in:
Ryan Baxter
2021-07-16 12:03:31 -04:00
2 changed files with 45 additions and 3 deletions

View File

@@ -66,9 +66,16 @@ public class ConfigServerConfigDataLocationResolver
protected PropertyHolder loadProperties(ConfigDataLocationResolverContext context, String uris) {
Binder binder = context.getBinder();
BindHandler bindHandler = getBindHandler(context);
ConfigClientProperties configClientProperties = binder
.bind(ConfigClientProperties.PREFIX, Bindable.of(ConfigClientProperties.class), bindHandler)
.orElseGet(ConfigClientProperties::new);
ConfigClientProperties configClientProperties;
if (context.getBootstrapContext().isRegistered(ConfigClientProperties.class)) {
configClientProperties = context.getBootstrapContext().get(ConfigClientProperties.class);
}
else {
configClientProperties = binder
.bind(ConfigClientProperties.PREFIX, Bindable.of(ConfigClientProperties.class), bindHandler)
.orElseGet(ConfigClientProperties::new);
}
if (!StringUtils.hasText(configClientProperties.getName())) {
// default to spring.application.name if name isn't set
String applicationName = binder.bind("spring.application.name", Bindable.of(String.class), bindHandler)

View File

@@ -31,7 +31,10 @@ import org.springframework.boot.logging.DeferredLog;
import org.springframework.mock.env.MockEnvironment;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class ConfigServerConfigDataLocationResolverTests {
@@ -145,6 +148,38 @@ public class ConfigServerConfigDataLocationResolverTests {
assertThat(resource.getProperties().getUri()).containsExactly(locationUri.split(","));
}
@Test
void useExistingConfigClientPropertiesInBootstrapContext() {
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> resources = this.resolver.resolveProfileSpecific(context,
ConfigDataLocation.of("configserver:"), mock(Profiles.class));
assertThat(resources).hasSize(1);
verify(bootstrapContext, times(1)).get(eq(ConfigClientProperties.class));
ConfigServerConfigDataResource resource = resources.get(0);
assertThat(resource.getProperties().getUri()).isEqualTo(new String[] { "http://myuri" });
}
@Test
void createNewConfigClientPropertiesInBootstrapContext() {
ConfigurableBootstrapContext bootstrapContext = mock(ConfigurableBootstrapContext.class);
when(bootstrapContext.isRegistered(eq(ConfigClientProperties.class))).thenReturn(false);
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> resources = this.resolver.resolveProfileSpecific(context,
ConfigDataLocation.of("configserver:http://locationuri"), mock(Profiles.class));
assertThat(resources).hasSize(1);
verify(bootstrapContext, times(0)).get(eq(ConfigClientProperties.class));
ConfigServerConfigDataResource resource = resources.get(0);
assertThat(resource.getProperties().getUri()).isEqualTo(new String[] { "http://locationuri" });
}
private ConfigServerConfigDataResource testUri(String propertyUri, String locationUri) {
this.environment.setProperty(ConfigClientProperties.PREFIX + ".uri", propertyUri);
when(context.getBootstrapContext()).thenReturn(mock(ConfigurableBootstrapContext.class));