diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java index 1df63fc8..14ad7464 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java @@ -221,7 +221,8 @@ public class NativeEnvironmentRepository implements EnvironmentRepository, Searc Environment result = new Environment(value.getName(), value.getProfiles(), value.getLabel(), this.version, value.getState()); for (PropertySource source : value.getPropertySources()) { - String name = source.getName(); + String originalName = source.getName(); + String name = originalName; if (this.environment.getPropertySources().contains(name)) { continue; } @@ -271,13 +272,20 @@ public class NativeEnvironmentRepository implements EnvironmentRepository, Searc if (!matches) { // Don't include this one: it wasn't matched by our search locations if (logger.isDebugEnabled()) { - logger.debug("Not adding property source: " + name); + logger.debug("Not adding property source: " + originalName); } continue; } } - logger.info("Adding property source: " + name); - result.add(new PropertySource(name, source.getSource())); + logger.info("Adding property source: " + originalName); + if (originalName.contains("document #")) { + // this is a multi-document file, use originalName for uniqueness. + result.add(new PropertySource(originalName, source.getSource())); + } + else { + // many other file tests rely on the mangled name + result.add(new PropertySource(name, source.getSource())); + } } return result; } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryTests.java index 60f094d6..99bd964a 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryTests.java @@ -82,6 +82,31 @@ public class NativeEnvironmentRepositoryTests { Environment environment = this.repository.findOne("foo", "development", "master"); assertThat(environment.getPropertySources().size()).isEqualTo(2); assertThat(environment.getVersion()).as("version was wrong").isEqualTo("myversion"); + // gh-1778 property sources has the same name. + assertThat(environment.getPropertySources().get(0).getName()) + .isNotEqualTo(environment.getPropertySources().get(1).getName()); + } + + @Test + public void prefixedYaml() { + this.repository.setSearchLocations("classpath:/test"); + Environment environment = this.repository.findOne("bar", "development", "master"); + assertThat(environment.getPropertySources().size()).isEqualTo(2); + assertThat(environment.getVersion()).as("version was wrong").isEqualTo("myversion"); + // gh-1778 property sources has the same name. + assertThat(environment.getPropertySources().get(0).getName()) + .isNotEqualTo(environment.getPropertySources().get(1).getName()); + } + + @Test + public void prefixedMultiDocProperties() { + this.repository.setSearchLocations("classpath:/test"); + Environment environment = this.repository.findOne("baz", "development", "master"); + assertThat(environment.getPropertySources().size()).isEqualTo(2); + assertThat(environment.getVersion()).as("version was wrong").isEqualTo("myversion"); + // gh-1778 property sources has the same name. + assertThat(environment.getPropertySources().get(0).getName()) + .isNotEqualTo(environment.getPropertySources().get(1).getName()); } @Test diff --git a/spring-cloud-config-server/src/test/resources/test/bar.yml b/spring-cloud-config-server/src/test/resources/test/bar.yml new file mode 100644 index 00000000..688e1d94 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/test/bar.yml @@ -0,0 +1,12 @@ +client: + test: Default + +--- + +spring: + config: + activate: + on-profile: development + +client: + test: Development diff --git a/spring-cloud-config-server/src/test/resources/test/baz.properties b/spring-cloud-config-server/src/test/resources/test/baz.properties new file mode 100644 index 00000000..66233c56 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/test/baz.properties @@ -0,0 +1,5 @@ +client.test=Default + +#--- +spring.config.activate.on-profile=development +client.test=Development