diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataEnvironmentContributors.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataEnvironmentContributors.java index 1da7d5a8e4..e40a4e46f4 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataEnvironmentContributors.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataEnvironmentContributors.java @@ -117,10 +117,9 @@ class ConfigDataEnvironmentContributors implements Iterable imports = contributor.getImports(); - boolean resolveProfileSpecific = !contributor.isFromProfileSpecificImport(); this.logger.trace(LogMessage.format("Processing imports %s", imports)); Map imported = importer.resolveAndLoad(activationContext, - locationResolverContext, loaderContext, imports, resolveProfileSpecific); + locationResolverContext, loaderContext, imports); this.logger.trace(LogMessage.of(() -> getImportedMessage(imported.keySet()))); ConfigDataEnvironmentContributor contributorAndChildren = contributor.withChildren(importPhase, asContributors(imported)); diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataImporter.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataImporter.java index 4532c000b0..0970b4f6a6 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataImporter.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataImporter.java @@ -75,16 +75,14 @@ class ConfigDataImporter { * @param locationResolverContext the location resolver context * @param loaderContext the loader context * @param locations the locations to resolve - * @param resolveProfileSpecific if profile specific resolution should be attempted * @return a map of the loaded locations and data */ Map resolveAndLoad(ConfigDataActivationContext activationContext, ConfigDataLocationResolverContext locationResolverContext, ConfigDataLoaderContext loaderContext, - List locations, boolean resolveProfileSpecific) { + List locations) { try { Profiles profiles = (activationContext != null) ? activationContext.getProfiles() : null; - List resolved = resolve(locationResolverContext, profiles, locations, - resolveProfileSpecific); + List resolved = resolve(locationResolverContext, profiles, locations); return load(loaderContext, resolved); } catch (IOException ex) { @@ -93,18 +91,18 @@ class ConfigDataImporter { } private List resolve(ConfigDataLocationResolverContext locationResolverContext, - Profiles profiles, List locations, boolean resolveProfileSpecific) { + Profiles profiles, List locations) { List resolved = new ArrayList<>(locations.size()); for (ConfigDataLocation location : locations) { - resolved.addAll(resolve(locationResolverContext, profiles, location, resolveProfileSpecific)); + resolved.addAll(resolve(locationResolverContext, profiles, location)); } return Collections.unmodifiableList(resolved); } private List resolve(ConfigDataLocationResolverContext locationResolverContext, - Profiles profiles, ConfigDataLocation location, boolean resolveProfileSpecific) { + Profiles profiles, ConfigDataLocation location) { try { - return this.resolvers.resolve(locationResolverContext, location, profiles, resolveProfileSpecific); + return this.resolvers.resolve(locationResolverContext, location, profiles); } catch (ConfigDataNotFoundException ex) { handle(ex, location, null); diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataLocationResolvers.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataLocationResolvers.java index 55f5cb448e..5f89b1a0d8 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataLocationResolvers.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataLocationResolvers.java @@ -98,23 +98,22 @@ class ConfigDataLocationResolvers { } List resolve(ConfigDataLocationResolverContext context, ConfigDataLocation location, - Profiles profiles, boolean resolveProfileSpecific) { + Profiles profiles) { if (location == null) { return Collections.emptyList(); } for (ConfigDataLocationResolver resolver : getResolvers()) { if (resolver.isResolvable(context, location)) { - return resolve(resolver, context, location, profiles, resolveProfileSpecific); + return resolve(resolver, context, location, profiles); } } throw new UnsupportedConfigDataLocationException(location); } private List resolve(ConfigDataLocationResolver resolver, - ConfigDataLocationResolverContext context, ConfigDataLocation location, Profiles profiles, - boolean resolveProfileSpecific) { + ConfigDataLocationResolverContext context, ConfigDataLocation location, Profiles profiles) { List resolved = resolve(location, false, () -> resolver.resolve(context, location)); - if (profiles == null || !resolveProfileSpecific) { + if (profiles == null) { return resolved; } List profileSpecific = resolve(location, true, diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentContributorsTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentContributorsTests.java index e9b37306ab..54ca2020c0 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentContributorsTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentContributorsTests.java @@ -43,7 +43,6 @@ import org.springframework.mock.env.MockPropertySource; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -120,7 +119,7 @@ class ConfigDataEnvironmentContributorsTests { Map imported = new LinkedHashMap<>(); imported.put(new ConfigDataResolutionResult(LOCATION_1, new TestConfigDataResource("a"), false), new ConfigData(Arrays.asList(propertySource))); - given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(locations), anyBoolean())) + given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(locations))) .willReturn(imported); ConfigDataEnvironmentContributor contributor = ConfigDataEnvironmentContributor.ofInitialImport(LOCATION_1); ConfigDataEnvironmentContributors contributors = new ConfigDataEnvironmentContributors(this.logFactory, @@ -143,14 +142,14 @@ class ConfigDataEnvironmentContributorsTests { Map initialImported = new LinkedHashMap<>(); initialImported.put(new ConfigDataResolutionResult(LOCATION_1, new TestConfigDataResource("a"), false), new ConfigData(Arrays.asList(initialPropertySource))); - given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(initialLocations), - anyBoolean())).willReturn(initialImported); + given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(initialLocations))) + .willReturn(initialImported); List secondLocations = Arrays.asList(LOCATION_2); MockPropertySource secondPropertySource = new MockPropertySource(); Map secondImported = new LinkedHashMap<>(); secondImported.put(new ConfigDataResolutionResult(LOCATION_2, new TestConfigDataResource("b"), false), new ConfigData(Arrays.asList(secondPropertySource))); - given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(secondLocations), anyBoolean())) + given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(secondLocations))) .willReturn(secondImported); ConfigDataEnvironmentContributor contributor = ConfigDataEnvironmentContributor.ofInitialImport(LOCATION_1); ConfigDataEnvironmentContributors contributors = new ConfigDataEnvironmentContributors(this.logFactory, @@ -177,13 +176,13 @@ class ConfigDataEnvironmentContributorsTests { Map imported = new LinkedHashMap<>(); imported.put(new ConfigDataResolutionResult(LOCATION_1, new TestConfigDataResource("a'"), false), new ConfigData(Arrays.asList(propertySource))); - given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(locations), anyBoolean())) + given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(locations))) .willReturn(imported); ConfigDataEnvironmentContributor contributor = ConfigDataEnvironmentContributor.ofInitialImport(LOCATION_1); ConfigDataEnvironmentContributors contributors = new ConfigDataEnvironmentContributors(this.logFactory, this.bootstrapContext, Arrays.asList(existingContributor, contributor)); contributors.withProcessedImports(this.importer, this.activationContext); - verify(this.importer).resolveAndLoad(any(), this.locationResolverContext.capture(), any(), any(), anyBoolean()); + verify(this.importer).resolveAndLoad(any(), this.locationResolverContext.capture(), any(), any()); ConfigDataLocationResolverContext context = this.locationResolverContext.getValue(); assertThat(context.getBinder().bind("test", String.class).get()).isEqualTo("springboot"); } @@ -197,21 +196,20 @@ class ConfigDataEnvironmentContributorsTests { Map initialImported = new LinkedHashMap<>(); initialImported.put(new ConfigDataResolutionResult(LOCATION_1, new TestConfigDataResource("a"), false), new ConfigData(Arrays.asList(initialPropertySource))); - given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(initialLocations), - anyBoolean())).willReturn(initialImported); + given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(initialLocations))) + .willReturn(initialImported); List secondLocations = Arrays.asList(LOCATION_2); MockPropertySource secondPropertySource = new MockPropertySource(); Map secondImported = new LinkedHashMap<>(); secondImported.put(new ConfigDataResolutionResult(LOCATION_2, new TestConfigDataResource("b"), false), new ConfigData(Arrays.asList(secondPropertySource))); - given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(secondLocations), anyBoolean())) + given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(secondLocations))) .willReturn(secondImported); ConfigDataEnvironmentContributor contributor = ConfigDataEnvironmentContributor.ofInitialImport(LOCATION_1); ConfigDataEnvironmentContributors contributors = new ConfigDataEnvironmentContributors(this.logFactory, this.bootstrapContext, Arrays.asList(contributor)); contributors.withProcessedImports(this.importer, this.activationContext); - verify(this.importer).resolveAndLoad(any(), this.locationResolverContext.capture(), any(), eq(secondLocations), - anyBoolean()); + verify(this.importer).resolveAndLoad(any(), this.locationResolverContext.capture(), any(), eq(secondLocations)); ConfigDataLocationResolverContext context = this.locationResolverContext.getValue(); assertThat(context.getParent()).hasToString("a"); } @@ -228,13 +226,13 @@ class ConfigDataEnvironmentContributorsTests { Map imported = new LinkedHashMap<>(); imported.put(new ConfigDataResolutionResult(LOCATION_1, new TestConfigDataResource("a'"), false), new ConfigData(Arrays.asList(propertySource))); - given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(locations), anyBoolean())) + given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(locations))) .willReturn(imported); ConfigDataEnvironmentContributor contributor = ConfigDataEnvironmentContributor.ofInitialImport(LOCATION_1); ConfigDataEnvironmentContributors contributors = new ConfigDataEnvironmentContributors(this.logFactory, this.bootstrapContext, Arrays.asList(existingContributor, contributor)); contributors.withProcessedImports(this.importer, this.activationContext); - verify(this.importer).resolveAndLoad(any(), this.locationResolverContext.capture(), any(), any(), anyBoolean()); + verify(this.importer).resolveAndLoad(any(), this.locationResolverContext.capture(), any(), any()); ConfigDataLocationResolverContext context = this.locationResolverContext.getValue(); assertThat(context.getBootstrapContext()).isSameAs(this.bootstrapContext); } @@ -251,13 +249,13 @@ class ConfigDataEnvironmentContributorsTests { Map imported = new LinkedHashMap<>(); imported.put(new ConfigDataResolutionResult(LOCATION_1, new TestConfigDataResource("a'"), false), new ConfigData(Arrays.asList(propertySource))); - given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(locations), anyBoolean())) + given(this.importer.resolveAndLoad(eq(this.activationContext), any(), any(), eq(locations))) .willReturn(imported); ConfigDataEnvironmentContributor contributor = ConfigDataEnvironmentContributor.ofInitialImport(LOCATION_1); ConfigDataEnvironmentContributors contributors = new ConfigDataEnvironmentContributors(this.logFactory, this.bootstrapContext, Arrays.asList(existingContributor, contributor)); contributors.withProcessedImports(this.importer, this.activationContext); - verify(this.importer).resolveAndLoad(any(), any(), this.loaderContext.capture(), any(), anyBoolean()); + verify(this.importer).resolveAndLoad(any(), any(), this.loaderContext.capture(), any()); ConfigDataLoaderContext context = this.loaderContext.getValue(); assertThat(context.getBootstrapContext()).isSameAs(this.bootstrapContext); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorIntegrationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorIntegrationTests.java index fb0b2c9b80..6d2c1c7d7d 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorIntegrationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorIntegrationTests.java @@ -750,8 +750,8 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { assertThat(environment.getProperty("test2")).isEqualTo("test2"); } - @Test // gh-26752 - void runWhenHasProfileSpecificImportWithImportDoesNotImportSecondProfileSpecificFile() { + @Test // gh-26960 + void runWhenHasProfileSpecificImportWithImportImportsSecondProfileSpecificFile() { ConfigurableApplicationContext context = this.application .run("--spring.config.name=application-profile-specific-import-with-import"); ConfigurableEnvironment environment = context.getEnvironment(); @@ -759,17 +759,17 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { assertThat(environment.containsProperty("application-profile-specific-import-with-import-p1")).isTrue(); assertThat(environment.containsProperty("application-profile-specific-import-with-import-p2")).isFalse(); assertThat(environment.containsProperty("application-profile-specific-import-with-import-import")).isTrue(); - assertThat(environment.containsProperty("application-profile-specific-import-with-import-import-p1")).isFalse(); - assertThat(environment.containsProperty("application-profile-specific-import-with-import-import-p2")).isFalse(); + assertThat(environment.containsProperty("application-profile-specific-import-with-import-import-p1")).isTrue(); + assertThat(environment.containsProperty("application-profile-specific-import-with-import-import-p2")).isTrue(); } - @Test // gh-26753 - void runWhenHasProfileSpecificImportWithCustomImportDoesNotResolveProfileSpecific() { + @Test // gh-26960 + void runWhenHasProfileSpecificImportWithCustomImportResolvesProfileSpecific() { ConfigurableApplicationContext context = this.application .run("--spring.config.name=application-profile-specific-import-with-custom-import"); ConfigurableEnvironment environment = context.getEnvironment(); assertThat(environment.containsProperty("test:boot")).isTrue(); - assertThat(environment.containsProperty("test:boot:ps")).isFalse(); + assertThat(environment.containsProperty("test:boot:ps")).isTrue(); } @Test // gh-26593 diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataImporterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataImporterTests.java index ffd9bfbdf4..73082f3f6a 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataImporterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataImporterTests.java @@ -80,16 +80,16 @@ class ConfigDataImporterTests { TestResource resource2 = new TestResource("r2"); ConfigData configData1 = new ConfigData(Collections.singleton(new MockPropertySource())); ConfigData configData2 = new ConfigData(Collections.singleton(new MockPropertySource())); - given(this.resolvers.resolve(this.locationResolverContext, location1, this.profiles, true)) + given(this.resolvers.resolve(this.locationResolverContext, location1, this.profiles)) .willReturn(Collections.singletonList(new ConfigDataResolutionResult(location1, resource1, false))); - given(this.resolvers.resolve(this.locationResolverContext, location2, this.profiles, true)) + given(this.resolvers.resolve(this.locationResolverContext, location2, this.profiles)) .willReturn(Collections.singletonList(new ConfigDataResolutionResult(location2, resource2, false))); given(this.loaders.load(this.loaderContext, resource1)).willReturn(configData1); given(this.loaders.load(this.loaderContext, resource2)).willReturn(configData2); ConfigDataImporter importer = new ConfigDataImporter(this.logFactory, ConfigDataNotFoundAction.FAIL, this.resolvers, this.loaders); Collection loaded = importer.resolveAndLoad(this.activationContext, this.locationResolverContext, - this.loaderContext, Arrays.asList(location1, location2), true).values(); + this.loaderContext, Arrays.asList(location1, location2)).values(); assertThat(loaded).containsExactly(configData2, configData1); } @@ -106,11 +106,11 @@ class ConfigDataImporterTests { ConfigData configData1 = new ConfigData(Collections.singleton(new MockPropertySource())); ConfigData configData2 = new ConfigData(Collections.singleton(new MockPropertySource())); ConfigData configData3 = new ConfigData(Collections.singleton(new MockPropertySource())); - given(this.resolvers.resolve(this.locationResolverContext, location1, this.profiles, true)) + given(this.resolvers.resolve(this.locationResolverContext, location1, this.profiles)) .willReturn(Collections.singletonList(new ConfigDataResolutionResult(location1, resource1, false))); - given(this.resolvers.resolve(this.locationResolverContext, location2, this.profiles, true)) + given(this.resolvers.resolve(this.locationResolverContext, location2, this.profiles)) .willReturn(Collections.singletonList(new ConfigDataResolutionResult(location2, resource2, false))); - given(this.resolvers.resolve(this.locationResolverContext, location3, this.profiles, true)) + given(this.resolvers.resolve(this.locationResolverContext, location3, this.profiles)) .willReturn(Collections.singletonList(new ConfigDataResolutionResult(location3, resource3, false))); given(this.loaders.load(this.loaderContext, resource1)).willReturn(configData1); given(this.loaders.load(this.loaderContext, resource2)).willReturn(configData2); @@ -118,9 +118,9 @@ class ConfigDataImporterTests { ConfigDataImporter importer = new ConfigDataImporter(this.logFactory, ConfigDataNotFoundAction.FAIL, this.resolvers, this.loaders); Collection loaded1and2 = importer.resolveAndLoad(this.activationContext, - this.locationResolverContext, this.loaderContext, locations1and2, true).values(); + this.locationResolverContext, this.loaderContext, locations1and2).values(); Collection loaded2and3 = importer.resolveAndLoad(this.activationContext, - this.locationResolverContext, this.loaderContext, locations2and3, true).values(); + this.locationResolverContext, this.loaderContext, locations2and3).values(); assertThat(loaded1and2).containsExactly(configData2, configData1); assertThat(loaded2and3).containsExactly(configData3); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataLocationResolversTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataLocationResolversTests.java index 65eb86ac02..354e8a25d2 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataLocationResolversTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataLocationResolversTests.java @@ -131,7 +131,7 @@ class ConfigDataLocationResolversTests { this.binder, this.resourceLoader, Arrays.asList(LowestTestResolver.class.getName(), HighestTestResolver.class.getName())); ConfigDataLocation location = ConfigDataLocation.of("LowestTestResolver:test"); - List resolved = resolvers.resolve(this.context, location, null, true); + List resolved = resolvers.resolve(this.context, location, null); assertThat(resolved).hasSize(1); TestConfigDataResource resource = (TestConfigDataResource) resolved.get(0).getResource(); assertThat(resource.getResolver()).isInstanceOf(LowestTestResolver.class); @@ -145,7 +145,7 @@ class ConfigDataLocationResolversTests { this.binder, this.resourceLoader, Arrays.asList(LowestTestResolver.class.getName(), HighestTestResolver.class.getName())); ConfigDataLocation location = ConfigDataLocation.of("LowestTestResolver:test"); - List resolved = resolvers.resolve(this.context, location, this.profiles, true); + List resolved = resolvers.resolve(this.context, location, this.profiles); assertThat(resolved).hasSize(2); TestConfigDataResource resource = (TestConfigDataResource) resolved.get(0).getResource(); assertThat(resource.getResolver()).isInstanceOf(LowestTestResolver.class); @@ -164,7 +164,7 @@ class ConfigDataLocationResolversTests { Arrays.asList(LowestTestResolver.class.getName(), HighestTestResolver.class.getName())); ConfigDataLocation location = ConfigDataLocation.of("Missing:test"); assertThatExceptionOfType(UnsupportedConfigDataLocationException.class) - .isThrownBy(() -> resolvers.resolve(this.context, location, null, true)) + .isThrownBy(() -> resolvers.resolve(this.context, location, null)) .satisfies((ex) -> assertThat(ex.getLocation()).isEqualTo(location)); } @@ -173,7 +173,7 @@ class ConfigDataLocationResolversTests { ConfigDataLocationResolvers resolvers = new ConfigDataLocationResolvers(this.logFactory, this.bootstrapContext, this.binder, this.resourceLoader, Arrays.asList(OptionalResourceTestResolver.class.getName())); ConfigDataLocation location = ConfigDataLocation.of("OptionalResourceTestResolver:test"); - List resolved = resolvers.resolve(this.context, location, null, true); + List resolved = resolvers.resolve(this.context, location, null); assertThat(resolved.get(0).getResource().isOptional()).isTrue(); }