From 587cc97b4cd3a0968fc16eaac902015e2a5b91c3 Mon Sep 17 00:00:00 2001 From: spencergibb Date: Wed, 10 Mar 2021 17:55:20 -0500 Subject: [PATCH] Adds ignore imports and profiles to ConfigData. This allows config server to apply profiles and imports while ignoring them on the client side. Fixes gh-1788 --- .../config/client/ConfigServerConfigDataLoader.java | 13 ++++++++++++- ...rverConfigDataCustomizationIntegrationTests.java | 5 ++++- 2 files changed, 16 insertions(+), 2 deletions(-) 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 4dc3e5079..de3d79af0 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 @@ -27,6 +27,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.ConfigDataLoader; import org.springframework.boot.context.config.ConfigDataLoaderContext; import org.springframework.boot.context.properties.bind.Binder; @@ -125,7 +126,17 @@ public ConfigData doLoad(ConfigDataLoaderContext context, ConfigServerConfigData // the existence of this property source confirms a successful // response from config server composite.add(0, new MapPropertySource("configClient", map)); - return new ConfigData(composite); + try { + return new ConfigData(composite, Option.IGNORE_IMPORTS, Option.IGNORE_PROFILES); + } + catch (NoSuchFieldError e) { + // IGNORE_PROFILES was added in boot 2.4.3, for backwards + // compatibility + // IGNORE_IMPORTS alone causes NPE prior to 2.4.3 + // this will still throw an error if spring.profiles.include in + // remote config + return new ConfigData(composite); + } } } errorBody = String.format("None of labels %s found", Arrays.toString(labels)); diff --git a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataCustomizationIntegrationTests.java b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataCustomizationIntegrationTests.java index dc571d4fd..1a917ed0f 100644 --- a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataCustomizationIntegrationTests.java +++ b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataCustomizationIntegrationTests.java @@ -26,6 +26,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.config.ConfigData; +import org.springframework.boot.context.config.ConfigData.Option; import org.springframework.boot.context.properties.bind.BindContext; import org.springframework.boot.context.properties.bind.BindHandler; import org.springframework.boot.context.properties.bind.Bindable; @@ -100,7 +101,9 @@ static class Interceptor implements LoaderInterceptor { public ConfigData apply(ConfigServerBootstrapper.LoadContext context) { applied = true; hasBinder = context.getBinder() != null; - return context.getInvocation().apply(context.getLoaderContext(), context.getResource()); + ConfigData configData = context.getInvocation().apply(context.getLoaderContext(), context.getResource()); + assertThat(configData.getOptions()).contains(Option.IGNORE_IMPORTS, Option.IGNORE_PROFILES); + return configData; } }