Merge branch '2.6.x' into 2.7.x

Closes gh-29411
pull/29296/head
Phillip Webb 3 years ago
commit e4e16f81ec

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2021 the original author or authors. * Copyright 2012-2022 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -87,14 +87,15 @@ public final class ConfigurationPropertySources {
Assert.isInstanceOf(ConfigurableEnvironment.class, environment); Assert.isInstanceOf(ConfigurableEnvironment.class, environment);
MutablePropertySources sources = ((ConfigurableEnvironment) environment).getPropertySources(); MutablePropertySources sources = ((ConfigurableEnvironment) environment).getPropertySources();
PropertySource<?> attached = getAttached(sources); PropertySource<?> attached = getAttached(sources);
if (attached != null && attached.getSource() != sources) { if (attached != null) {
if (attached instanceof ConfigurationPropertySourcesPropertySource
&& ((SpringConfigurationPropertySources) attached.getSource()).isUsingSources(sources)) {
return;
}
sources.remove(ATTACHED_PROPERTY_SOURCE_NAME); sources.remove(ATTACHED_PROPERTY_SOURCE_NAME);
attached = null;
}
if (attached == null) {
sources.addFirst(new ConfigurationPropertySourcesPropertySource(ATTACHED_PROPERTY_SOURCE_NAME,
new SpringConfigurationPropertySources(sources)));
} }
sources.addFirst(new ConfigurationPropertySourcesPropertySource(ATTACHED_PROPERTY_SOURCE_NAME,
new SpringConfigurationPropertySources(sources)));
} }
static PropertySource<?> getAttached(MutablePropertySources sources) { static PropertySource<?> getAttached(MutablePropertySources sources) {

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2022 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -71,6 +71,19 @@ class ConfigurationPropertySourcesTests {
assertThat(child.getProperty("my.example-property")).isEqualTo("1234"); assertThat(child.getProperty("my.example-property")).isEqualTo("1234");
} }
@Test
void attachWhenAlreadyAttachedWithSameSourcesShouldReturnExistingInstance() {
ConfigurableEnvironment environment = new StandardEnvironment();
MutablePropertySources sources = environment.getPropertySources();
sources.addLast(new SystemEnvironmentPropertySource("system", Collections.singletonMap("SERVER_PORT", "1234")));
sources.addLast(new MapPropertySource("config", Collections.singletonMap("server.port", "4568")));
ConfigurationPropertySources.attach(environment);
Iterable<ConfigurationPropertySource> first = ConfigurationPropertySources.get(environment);
ConfigurationPropertySources.attach(environment);
Iterable<ConfigurationPropertySource> second = ConfigurationPropertySources.get(environment);
assertThat(first).isSameAs(second);
}
@Test @Test
void getWhenNotAttachedShouldReturnAdapted() { void getWhenNotAttachedShouldReturnAdapted() {
ConfigurableEnvironment environment = new StandardEnvironment(); ConfigurableEnvironment environment = new StandardEnvironment();

Loading…
Cancel
Save