From 3056d5f842aa51fded6b8d379486295b855cd830 Mon Sep 17 00:00:00 2001 From: spencergibb Date: Thu, 8 Apr 2021 17:39:25 -0400 Subject: [PATCH] Fixes profile ordering of remote vs local. Previously a local profiles specific file would have more priority than a remote profile specific file. Using a new ConfigData Option, this is now fixed. Fixes gh-1795 --- .../client/ConfigServerConfigDataLoader.java | 42 ++++++--- .../ConfigServerConfigDataResource.java | 7 +- ...nfigDataCustomizationIntegrationTests.java | 13 ++- .../ConfigDataOrderingIntegrationTests.java | 89 +++++++++++++++++++ .../resources/config/profilesample-dev.yml | 1 + .../test/resources/config/profilesample.yml | 1 + .../src/test/resources/orderingtest-dev.yml | 1 + .../src/test/resources/orderingtest.yml | 1 + .../NativeEnvironmentRepository.java | 5 +- 9 files changed, 142 insertions(+), 18 deletions(-) create mode 100644 spring-cloud-config-sample/src/test/java/sample/ConfigDataOrderingIntegrationTests.java create mode 100644 spring-cloud-config-sample/src/test/resources/config/profilesample-dev.yml create mode 100644 spring-cloud-config-sample/src/test/resources/config/profilesample.yml create mode 100644 spring-cloud-config-sample/src/test/resources/orderingtest-dev.yml create mode 100644 spring-cloud-config-sample/src/test/resources/orderingtest.yml diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java index 5136ab08..3d69ab78 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java @@ -19,6 +19,7 @@ package org.springframework.cloud.config.client; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.EnumSet; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -28,6 +29,7 @@ import org.apache.commons.logging.Log; import org.springframework.boot.context.config.ConfigData; import org.springframework.boot.context.config.ConfigData.Option; +import org.springframework.boot.context.config.ConfigData.Options; import org.springframework.boot.context.config.ConfigDataLoader; import org.springframework.boot.context.config.ConfigDataLoaderContext; import org.springframework.boot.context.properties.bind.Binder; @@ -62,6 +64,8 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader ALL_OPTIONS = EnumSet.allOf(Option.class); + protected final Log logger; public ConfigServerConfigDataLoader(Log logger) { @@ -91,7 +95,7 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader> composite = new ArrayList<>(); + List> propertySources = new ArrayList<>(); Exception error = null; String errorBody = null; try { @@ -113,7 +117,7 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader map = translateOrigins(source.getName(), (Map) source.getSource()); - composite.add(0, + propertySources.add(0, new OriginTrackedMapPropertySource("configserver:" + source.getName(), map)); } } @@ -127,17 +131,31 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader 2) { + // boot 2.4.5+ + return new ConfigData(propertySources, propertySource -> { + String propertySourceName = propertySource.getName(); + List