Refactor PropertySourcesDeducer
Prior to the changes that fixed #12451, `FilteredPropertySources` and `CompositePropertySources` were required by the `PropertySourcesDeducer` to ensure that configuration properties binding could see changes to the environment even when there was a PropertySourcesPlaceholderConfigurer in the context. #12451 changed the way property sources are adapted by `SpringConfigurationPropertySources`, removing the need for `FilteredPropertySources` and `CompositePropertySources`. Fixes gh-13738pull/14003/head
parent
7e2494ebdd
commit
16aff4cd2c
@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2012-2018 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.boot.context.properties;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.StreamSupport;
|
|
||||||
|
|
||||||
import org.springframework.core.env.PropertySource;
|
|
||||||
import org.springframework.core.env.PropertySources;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A composite {@link PropertySources} backed by one or more {@code PropertySources}.
|
|
||||||
* Changes to the backing {@code PropertySources} are automatically reflected in the
|
|
||||||
* composite.
|
|
||||||
*
|
|
||||||
* @author Andy Wilkinson
|
|
||||||
*/
|
|
||||||
final class CompositePropertySources implements PropertySources {
|
|
||||||
|
|
||||||
private final List<PropertySources> propertySources;
|
|
||||||
|
|
||||||
CompositePropertySources(PropertySources... propertySources) {
|
|
||||||
this.propertySources = Arrays.asList(propertySources);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterator<PropertySource<?>> iterator() {
|
|
||||||
return this.propertySources.stream()
|
|
||||||
.flatMap((sources) -> StreamSupport.stream(sources.spliterator(), false))
|
|
||||||
.iterator();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean contains(String name) {
|
|
||||||
for (PropertySources sources : this.propertySources) {
|
|
||||||
if (sources.contains(name)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PropertySource<?> get(String name) {
|
|
||||||
for (PropertySources sources : this.propertySources) {
|
|
||||||
PropertySource<?> source = sources.get(name);
|
|
||||||
if (source != null) {
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2012-2017 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.boot.context.properties;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.StreamSupport;
|
|
||||||
|
|
||||||
import org.springframework.core.env.PropertySource;
|
|
||||||
import org.springframework.core.env.PropertySources;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A {@link PropertySources} decorator that filters property sources by name.
|
|
||||||
*
|
|
||||||
* @author Andy Wilkinson
|
|
||||||
*/
|
|
||||||
final class FilteredPropertySources implements PropertySources {
|
|
||||||
|
|
||||||
private final PropertySources delegate;
|
|
||||||
|
|
||||||
private final Set<String> filtered;
|
|
||||||
|
|
||||||
FilteredPropertySources(PropertySources delegate, String... filtered) {
|
|
||||||
this.delegate = delegate;
|
|
||||||
this.filtered = new HashSet<>(Arrays.asList(filtered));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean contains(String name) {
|
|
||||||
if (included(name)) {
|
|
||||||
return this.delegate.contains(name);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PropertySource<?> get(String name) {
|
|
||||||
if (included(name)) {
|
|
||||||
return this.delegate.get(name);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterator<PropertySource<?>> iterator() {
|
|
||||||
return StreamSupport.stream(this.delegate.spliterator(), false)
|
|
||||||
.filter(this::included).iterator();
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean included(PropertySource<?> propertySource) {
|
|
||||||
return included(propertySource.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean included(String name) {
|
|
||||||
return (!this.filtered.contains(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,144 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2012-2017 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.boot.context.properties;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import org.springframework.core.env.MapPropertySource;
|
|
||||||
import org.springframework.core.env.MutablePropertySources;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests for {@link CompositePropertySources}.
|
|
||||||
*
|
|
||||||
* @author Andy Wilkinson
|
|
||||||
*/
|
|
||||||
public class CompositePropertySourcesTests {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void containsReturnsFalseWithNoBackingSources() {
|
|
||||||
assertThat(new CompositePropertySources().contains("foo")).isFalse();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getReturnsNullWithNoBackingSources() {
|
|
||||||
assertThat(new CompositePropertySources().get("foo")).isNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void iteratorIsEmptyWithNoBackingSources() {
|
|
||||||
assertThat(new CompositePropertySources().iterator()).hasSize(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void containsReturnsTrueForPropertySourceFoundInBackingSources() {
|
|
||||||
MutablePropertySources sources = new MutablePropertySources();
|
|
||||||
sources.addFirst(new MapPropertySource("foo", Collections.emptyMap()));
|
|
||||||
assertThat(new CompositePropertySources(sources).contains("foo")).isTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void containsReturnsFalseForPropertySourceNotFoundInBackingSources() {
|
|
||||||
MutablePropertySources sources = new MutablePropertySources();
|
|
||||||
sources.addFirst(new MapPropertySource("bar", Collections.emptyMap()));
|
|
||||||
assertThat(new CompositePropertySources(sources).contains("foo")).isFalse();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getReturnsPropertySourceFoundInBackingSources() {
|
|
||||||
MutablePropertySources sources = new MutablePropertySources();
|
|
||||||
MapPropertySource fooSource = new MapPropertySource("foo",
|
|
||||||
Collections.emptyMap());
|
|
||||||
sources.addFirst(fooSource);
|
|
||||||
assertThat(new CompositePropertySources(sources).get("foo")).isEqualTo(fooSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getReturnsNullWhenPropertySourceNotFoundInBackingSources() {
|
|
||||||
MutablePropertySources sources = new MutablePropertySources();
|
|
||||||
sources.addFirst(new MapPropertySource("foo", Collections.emptyMap()));
|
|
||||||
assertThat(new CompositePropertySources(sources).get("bar")).isNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void iteratorContainsSingleEntryWithSingleBackingSource() {
|
|
||||||
MutablePropertySources sources = new MutablePropertySources();
|
|
||||||
MapPropertySource fooSource = new MapPropertySource("foo",
|
|
||||||
Collections.emptyMap());
|
|
||||||
sources.addFirst(fooSource);
|
|
||||||
assertThat(new CompositePropertySources(sources).iterator())
|
|
||||||
.containsExactly(fooSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void iteratorReflectsOrderingOfSourcesAcrossMultipleBackingSources() {
|
|
||||||
MutablePropertySources sourcesOne = new MutablePropertySources();
|
|
||||||
MapPropertySource fooSource = new MapPropertySource("foo",
|
|
||||||
Collections.emptyMap());
|
|
||||||
sourcesOne.addFirst(fooSource);
|
|
||||||
MapPropertySource barSource = new MapPropertySource("bar",
|
|
||||||
Collections.emptyMap());
|
|
||||||
sourcesOne.addFirst(barSource);
|
|
||||||
MutablePropertySources sourcesTwo = new MutablePropertySources();
|
|
||||||
MapPropertySource bazSource = new MapPropertySource("baz",
|
|
||||||
Collections.emptyMap());
|
|
||||||
sourcesTwo.addFirst(bazSource);
|
|
||||||
assertThat(new CompositePropertySources(sourcesOne, sourcesTwo).iterator())
|
|
||||||
.containsExactly(barSource, fooSource, bazSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void containsReflectsChangesInTheBackingSources() {
|
|
||||||
MutablePropertySources sources = new MutablePropertySources();
|
|
||||||
sources.addFirst(new MapPropertySource("foo", Collections.emptyMap()));
|
|
||||||
assertThat(new CompositePropertySources(sources).contains("bar")).isFalse();
|
|
||||||
MapPropertySource barSource = new MapPropertySource("bar",
|
|
||||||
Collections.emptyMap());
|
|
||||||
sources.addFirst(barSource);
|
|
||||||
assertThat(new CompositePropertySources(sources).contains("bar")).isTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getReflectsChangesInTheBackingSources() {
|
|
||||||
MutablePropertySources sources = new MutablePropertySources();
|
|
||||||
sources.addFirst(new MapPropertySource("foo", Collections.emptyMap()));
|
|
||||||
assertThat(new CompositePropertySources(sources).get("bar")).isNull();
|
|
||||||
MapPropertySource barSource = new MapPropertySource("bar",
|
|
||||||
Collections.emptyMap());
|
|
||||||
sources.addFirst(barSource);
|
|
||||||
assertThat(new CompositePropertySources(sources).get("bar")).isEqualTo(barSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void iteratorReflectsChangesInTheBackingSources() {
|
|
||||||
MutablePropertySources sources = new MutablePropertySources();
|
|
||||||
MapPropertySource fooSource = new MapPropertySource("foo",
|
|
||||||
Collections.emptyMap());
|
|
||||||
sources.addFirst(fooSource);
|
|
||||||
assertThat(new CompositePropertySources(sources).iterator())
|
|
||||||
.containsExactly(fooSource);
|
|
||||||
MapPropertySource barSource = new MapPropertySource("bar",
|
|
||||||
Collections.emptyMap());
|
|
||||||
sources.addFirst(barSource);
|
|
||||||
assertThat(new CompositePropertySources(sources).iterator())
|
|
||||||
.containsExactly(barSource, fooSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,85 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2012-2017 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.boot.context.properties;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import org.springframework.core.env.MapPropertySource;
|
|
||||||
import org.springframework.core.env.MutablePropertySources;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests for {@link FilteredPropertySources}.
|
|
||||||
*
|
|
||||||
* @author Andy Wilkinson
|
|
||||||
*/
|
|
||||||
public class FilteredPropertySourcesTests {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getReturnsNullForFilteredSource() {
|
|
||||||
MutablePropertySources delegate = new MutablePropertySources();
|
|
||||||
delegate.addFirst(new MapPropertySource("foo", Collections.emptyMap()));
|
|
||||||
assertThat(new FilteredPropertySources(delegate, "foo").get("foo")).isNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getReturnsSourceThatIsNotFiltered() {
|
|
||||||
MutablePropertySources delegate = new MutablePropertySources();
|
|
||||||
delegate.addFirst(new MapPropertySource("foo", Collections.emptyMap()));
|
|
||||||
MapPropertySource barSource = new MapPropertySource("bar",
|
|
||||||
Collections.emptyMap());
|
|
||||||
delegate.addFirst(barSource);
|
|
||||||
assertThat(new FilteredPropertySources(delegate, "foo").get("bar"))
|
|
||||||
.isEqualTo(barSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void containsReturnsFalseForFilteredSource() {
|
|
||||||
MutablePropertySources delegate = new MutablePropertySources();
|
|
||||||
delegate.addFirst(new MapPropertySource("foo", Collections.emptyMap()));
|
|
||||||
assertThat(new FilteredPropertySources(delegate, "foo").contains("foo"))
|
|
||||||
.isFalse();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void containsReturnsTrueForSourceThatIsNotFiltered() {
|
|
||||||
MutablePropertySources delegate = new MutablePropertySources();
|
|
||||||
delegate.addFirst(new MapPropertySource("foo", Collections.emptyMap()));
|
|
||||||
MapPropertySource barSource = new MapPropertySource("bar",
|
|
||||||
Collections.emptyMap());
|
|
||||||
delegate.addFirst(barSource);
|
|
||||||
assertThat(new FilteredPropertySources(delegate, "foo").contains("bar")).isTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void iteratorOmitsSourceThatIsFiltered() {
|
|
||||||
MutablePropertySources delegate = new MutablePropertySources();
|
|
||||||
MapPropertySource barSource = new MapPropertySource("bar",
|
|
||||||
Collections.emptyMap());
|
|
||||||
delegate.addFirst(barSource);
|
|
||||||
delegate.addFirst(new MapPropertySource("foo", Collections.emptyMap()));
|
|
||||||
MapPropertySource bazSource = new MapPropertySource("baz",
|
|
||||||
Collections.emptyMap());
|
|
||||||
delegate.addFirst(bazSource);
|
|
||||||
assertThat(new FilteredPropertySources(delegate, "foo").iterator())
|
|
||||||
.containsExactly(bazSource, barSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue