From 302d500ee9715ee766aba2aa3fd02bbdc790d906 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 15 Apr 2021 12:00:00 -0700 Subject: [PATCH] Add StandardConfigDataResource.getProfile method Add a `StandardConfigDataResource.getProfile()` method so that it's possible to tell the profile used when reading a profile specific resource. Fixes gh-25940 --- .../boot/context/config/StandardConfigDataReference.java | 4 ++++ .../boot/context/config/StandardConfigDataResource.java | 9 +++++++++ .../config/ConfigDataEnvironmentPostProcessorTests.java | 7 +++++++ 3 files changed, 20 insertions(+) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/StandardConfigDataReference.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/StandardConfigDataReference.java index 15361c0727a..095263db68f 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/StandardConfigDataReference.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/StandardConfigDataReference.java @@ -74,6 +74,10 @@ class StandardConfigDataReference { return this.directory; } + String getProfile() { + return this.profile; + } + boolean isSkippable() { return this.configDataLocation.isOptional() || this.directory != null || this.profile != null; } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/StandardConfigDataResource.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/StandardConfigDataResource.java index fa0284713db..c43d404baf7 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/StandardConfigDataResource.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/StandardConfigDataResource.java @@ -74,6 +74,15 @@ public class StandardConfigDataResource extends ConfigDataResource { return this.resource; } + /** + * Return the profile or {@code null} if the resource is not profile specific. + * @return the profile or {@code null} + * @since 2.4.6 + */ + public String getProfile() { + return this.reference.getProfile(); + } + boolean isEmptyDirectory() { return this.emptyDirectory; } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorTests.java index a3320116eb0..4a0545b5861 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorTests.java @@ -127,6 +127,13 @@ class ConfigDataEnvironmentPostProcessorTests { assertThat(this.environment.getActiveProfiles()).containsExactly("dev"); assertThat(listener.getAddedPropertySources()).hasSizeGreaterThan(0); assertThat(listener.getProfiles().getActive()).containsExactly("dev"); + assertThat(listener.getAddedPropertySources().stream().anyMatch((added) -> hasDevProfile(added.getResource()))) + .isTrue(); + } + + private boolean hasDevProfile(ConfigDataResource resource) { + return (resource instanceof StandardConfigDataResource) + && "dev".equals(((StandardConfigDataResource) resource).getProfile()); } }