diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java index 7bec38ca..2b203eab 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java @@ -119,15 +119,25 @@ public class JdbcEnvironmentRepository implements EnvironmentRepository, Ordered List envs = new ArrayList<>(new LinkedHashSet<>(Arrays.asList(profiles))); Collections.reverse(applications); Collections.reverse(envs); - for (String env : envs) { - for (String app : applications) { - addPropertySource(environment, app, env, label); - } + List labels; + if (label.contains(",")) { + labels = Arrays.asList(StringUtils.commaDelimitedListToStringArray(label)); + Collections.reverse(labels); } - // add properties without profile, equivalent to foo.yml, application.yml - if (!configIncomplete) { - for (String app : applications) { - addPropertySource(environment, app, null, label); + else { + labels = Collections.singletonList(label); + } + for (String l : labels) { + for (String env : envs) { + for (String app : applications) { + addPropertySource(environment, app, env, l); + } + } + // add properties without profile, equivalent to foo.yml, application.yml + if (!configIncomplete) { + for (String app : applications) { + addPropertySource(environment, app, null, l); + } } } return environment; diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepositoryTests.java index 89008342..fb55c907 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepositoryTests.java @@ -229,6 +229,22 @@ public class JdbcEnvironmentRepositoryTests { assertThat(env.getPropertySources().get(1).getSource().get("a.b.c")).isEqualTo("application-bar"); } + @Test + public void testMultipleLabels() { + JdbcEnvironmentProperties properties = new JdbcEnvironmentProperties(); + properties.setDefaultLabel("main"); + Environment env = new JdbcEnvironmentRepository(new JdbcTemplate(this.dataSource), properties, + new JdbcEnvironmentRepository.PropertiesResultSetExtractor()) + .findOne("application", "default", "main,master"); + assertThat(env.getName()).isEqualTo("application"); + assertThat(env.getProfiles()).isEqualTo(new String[] { "default" }); + assertThat(env.getLabel()).isEqualTo("main,master"); + assertThat(env.getPropertySources()).isNotEmpty(); + assertThat(env.getPropertySources().get(0).getSource().get("a.b.c")).isEqualTo("application-default"); + assertThat(env.getPropertySources().get(1).getSource().get("a.b.c")).isEqualTo("application-null"); + assertThat(env.getPropertySources().get(2).getSource().get("e.f.g")).isEqualTo("application-default"); + } + @ImportAutoConfiguration(SqlInitializationAutoConfiguration.class) @Configuration(proxyBeanMethods = false) protected static class ApplicationConfiguration { diff --git a/spring-cloud-config-server/src/test/resources/data-jdbc.sql b/spring-cloud-config-server/src/test/resources/data-jdbc.sql index e6dfb4f2..eb7f899e 100644 --- a/spring-cloud-config-server/src/test/resources/data-jdbc.sql +++ b/spring-cloud-config-server/src/test/resources/data-jdbc.sql @@ -14,3 +14,4 @@ INSERT into MY_PROPERTIES(APPLICATION, PROFILE, LABEL, MY_KEY, MY_VALUE) values INSERT into PROPERTIES(APPLICATION, PROFILE, LABEL, "KEY", "VALUE") values ('foo', 'bar', 'main', 'a.b.c', 'foo-bar'); INSERT into PROPERTIES(APPLICATION, PROFILE, LABEL, "KEY", "VALUE") values ('application', 'bar', 'main', 'a.b.c', 'application-bar'); +INSERT into PROPERTIES(APPLICATION, PROFILE, LABEL, "KEY", "VALUE") values ('application', 'default', 'main', 'e.f.g', 'application-default');