diff --git a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/ConfigMapPropertySourceLocator.java b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/ConfigMapPropertySourceLocator.java index 748385d9..a1212ad2 100644 --- a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/ConfigMapPropertySourceLocator.java +++ b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/ConfigMapPropertySourceLocator.java @@ -104,7 +104,7 @@ public class ConfigMapPropertySourceLocator implements PropertySourceLocator { }).filter(Files::isRegularFile).forEach(p -> { try { String content = new String(Files.readAllBytes(p)).trim(); - String filename = p.getFileName().toString().toLowerCase(); + String filename = p.toAbsolutePath().toString().toLowerCase(); if (filename.endsWith(".properties")) { addPropertySourceIfNeeded(c -> PROPERTIES_TO_MAP.apply(KEY_VALUE_TO_PROPERTIES.apply(c)), content, filename, composite); diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsFromFilePathsTests.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsFromFilePathsTests.java index a3d33be0..99928dc6 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsFromFilePathsTests.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsFromFilePathsTests.java @@ -43,11 +43,14 @@ import static org.springframework.cloud.kubernetes.config.ConfigMapTestUtil.crea properties = { "spring.application.name=configmap-path-example", "spring.cloud.kubernetes.config.enableApi=false", "spring.cloud.kubernetes.config.paths=" + ConfigMapsFromFilePathsTests.FIRST_FILE_NAME_FULL_PATH + "," - + ConfigMapsFromFilePathsTests.SECOND_FILE_NAME_FULL_PATH }) + + ConfigMapsFromFilePathsTests.SECOND_FILE_NAME_FULL_PATH + "," + + ConfigMapsFromFilePathsTests.FIRST_FILE_NAME_DUPLICATED_FULL_PATH }) public class ConfigMapsFromFilePathsTests { protected static final String FILES_ROOT_PATH = "/tmp/scktests"; + protected static final String FILES_SUB_PATH = "another-directory"; + protected static final String FIRST_FILE_NAME = "application.properties"; protected static final String SECOND_FILE_NAME = "extra.properties"; @@ -60,6 +63,9 @@ public class ConfigMapsFromFilePathsTests { protected static final String UNUSED_FILE_NAME_FULL_PATH = FILES_ROOT_PATH + "/" + UNUSED_FILE_NAME; + protected static final String FIRST_FILE_NAME_DUPLICATED_FULL_PATH = FILES_ROOT_PATH + "/" + FILES_SUB_PATH + "/" + + FIRST_FILE_NAME; + @ClassRule public static KubernetesServer server = new KubernetesServer(); @@ -79,11 +85,11 @@ public class ConfigMapsFromFilePathsTests { System.setProperty(Config.KUBERNETES_AUTH_TRYSERVICEACCOUNT_SYSTEM_PROPERTY, "false"); System.setProperty(Config.KUBERNETES_NAMESPACE_SYSTEM_PROPERTY, "test"); System.setProperty(Config.KUBERNETES_HTTP2_DISABLE, "true"); - - Files.createDirectories(Paths.get(FILES_ROOT_PATH)); + Files.createDirectories(Paths.get(FILES_ROOT_PATH + "/" + FILES_SUB_PATH)); createFileWithContent(FIRST_FILE_NAME_FULL_PATH, "bean.greeting=Hello from path!"); createFileWithContent(SECOND_FILE_NAME_FULL_PATH, "bean.farewell=Bye from path!"); createFileWithContent(UNUSED_FILE_NAME_FULL_PATH, "bean.morning=Morning from path!"); + createFileWithContent(FIRST_FILE_NAME_DUPLICATED_FULL_PATH, "bean.bonjour=Bonjour from path!"); } @AfterClass @@ -116,4 +122,10 @@ public class ConfigMapsFromFilePathsTests { .isEqualTo("Good morning, World!"); } + @Test + public void bonjourInputShouldReturnPropertyFromDuplicatedFile() { + this.webClient.get().uri("/api/bonjour").exchange().expectStatus().isOk().expectBody().jsonPath("content") + .isEqualTo("Bonjour from path!"); + } + } diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/example/GreetingController.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/example/GreetingController.java index 7574e283..ca71d3a2 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/example/GreetingController.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/example/GreetingController.java @@ -49,4 +49,9 @@ public class GreetingController { return new ResponseMessage(String.format(this.properties.getMorning(), name)); } + @RequestMapping("/api/bonjour") + public ResponseMessage bonjour(@RequestParam(value = "name", defaultValue = "World") String name) { + return new ResponseMessage(String.format(this.properties.getBonjour(), name)); + } + } diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/example/GreetingProperties.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/example/GreetingProperties.java index e8c613ee..0c47e8dc 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/example/GreetingProperties.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/example/GreetingProperties.java @@ -27,6 +27,8 @@ public class GreetingProperties { private String morning = "Good morning, %s!"; + private String bonjour = "Bonjour, %s!"; + public String getGreeting() { return this.greeting; } @@ -51,4 +53,12 @@ public class GreetingProperties { this.morning = morning; } + public String getBonjour() { + return this.bonjour; + } + + public void setBonjour(String bonjour) { + this.bonjour = bonjour; + } + }