diff --git a/pom.xml b/pom.xml
index 6e0dc49d..67350994 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,7 +30,6 @@
4.2.0-SNAPSHOT
2.28.13
v1-rev20201112-1.30.10
- 1.20.1
2.35.2
3.2.0
true
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');