From bec172d533fdf98644cc22ddc9084e2b3217108e Mon Sep 17 00:00:00 2001 From: sfeldstein Date: Tue, 20 Aug 2019 14:13:11 -0700 Subject: [PATCH] adding ability to set a root folder for global settings This allows separate projects to keep their own settings where common settings such as spring.* or server.* don't conflict. https://github.com/spring-projects/spring-boot/issues/17923 --- .../DevToolsHomePropertiesPostProcessor.java | 13 ++++++++++++- ...ToolsHomePropertiesPostProcessorTests.java | 19 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/env/DevToolsHomePropertiesPostProcessor.java b/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/env/DevToolsHomePropertiesPostProcessor.java index aaa324f73a47..4637c0d4dc62 100644 --- a/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/env/DevToolsHomePropertiesPostProcessor.java +++ b/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/env/DevToolsHomePropertiesPostProcessor.java @@ -44,7 +44,7 @@ public class DevToolsHomePropertiesPostProcessor implements EnvironmentPostProce @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { if (DevToolsEnablementDeducer.shouldEnable(Thread.currentThread())) { - File home = getHomeFolder(); + File home = getProjectRootFolder(); File propertyFile = (home != null) ? new File(home, FILE_NAME) : null; if (propertyFile != null && propertyFile.exists() && propertyFile.isFile()) { FileSystemResource resource = new FileSystemResource(propertyFile); @@ -61,6 +61,17 @@ public void postProcessEnvironment(ConfigurableEnvironment environment, SpringAp } } + protected File getProjectRootFolder() { + String rootFolder = System.getenv("PROJECT_ROOT_FOLDER"); + if (rootFolder == null) { + rootFolder = System.getProperty("PROJECT_ROOT_FOLDER"); + } + if (StringUtils.hasLength(rootFolder)) { + return new File(rootFolder); + } + return getHomeFolder(); + } + protected File getHomeFolder() { String home = System.getProperty("user.home"); if (StringUtils.hasLength(home)) { diff --git a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/env/DevToolsHomePropertiesPostProcessorTests.java b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/env/DevToolsHomePropertiesPostProcessorTests.java index d7f74ea938b8..bdff83dc7346 100644 --- a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/env/DevToolsHomePropertiesPostProcessorTests.java +++ b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/env/DevToolsHomePropertiesPostProcessorTests.java @@ -41,9 +41,26 @@ class DevToolsHomePropertiesPostProcessorTests { private File home; + private File rootDir; + @BeforeEach - void setup(@TempDir File tempDir) throws IOException { + void setup(@TempDir File tempDir, @TempDir File rootDir) throws IOException { this.home = tempDir; + this.rootDir = rootDir; + } + + @Test + void loadsRootFolderProperties() throws Exception { + System.setProperty("PROJECT_ROOT_FOLDER", rootDir.getAbsolutePath()); + Properties properties = new Properties(); + properties.put("uvw", "xyz"); + OutputStream out = new FileOutputStream(new File(this.rootDir, ".spring-boot-devtools.properties")); + properties.store(out, null); + out.close(); + ConfigurableEnvironment environment = new MockEnvironment(); + MockDevToolHomePropertiesPostProcessor postProcessor = new MockDevToolHomePropertiesPostProcessor(); + runPostProcessor(() -> postProcessor.postProcessEnvironment(environment, null)); + assertThat(environment.getProperty("uvw")).isEqualTo("xyz"); } @Test