Added support for devtools YAML configuration

See gh-17915
This commit is contained in:
HaiTao Zhang
2019-08-19 15:56:20 -07:00
committed by Madhura Bhave
parent b43827d626
commit 00a3ad0fd1
2 changed files with 165 additions and 14 deletions

View File

@@ -19,6 +19,7 @@ package org.springframework.boot.devtools.env;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.devtools.DevToolsEnablementDeducer;
@@ -35,32 +36,50 @@ import org.springframework.util.StringUtils;
*
* @author Phillip Webb
* @author Andy Wilkinson
* @author HaiTao Zhang
* @since 1.3.0
*/
public class DevToolsHomePropertiesPostProcessor implements EnvironmentPostProcessor {
private static final String FILE_NAME = ".spring-boot-devtools.properties";
private static final String[] FILE_NAMES = new String[] { ".spring-boot-devtools.yml", ".spring-boot-devtools.yaml",
".spring-boot-devtools.properties" };
private Logger logger = Logger.getLogger(getClass().getName());
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
if (DevToolsEnablementDeducer.shouldEnable(Thread.currentThread())) {
File home = getHomeFolder();
File propertyFile = (home != null) ? new File(home, FILE_NAME) : null;
if (propertyFile != null && propertyFile.exists() && propertyFile.isFile()) {
FileSystemResource resource = new FileSystemResource(propertyFile);
Properties properties;
try {
properties = PropertiesLoaderUtils.loadProperties(resource);
environment.getPropertySources()
.addFirst(new PropertiesPropertySource("devtools-local", properties));
}
catch (IOException ex) {
throw new IllegalStateException("Unable to load " + FILE_NAME, ex);
}
Properties properties = processDir(home, "/.config/spring-boot/", environment);
if (properties.isEmpty()) {
processDir(home, "", environment);
}
}
}
private Properties processDir(File home, String configPath, ConfigurableEnvironment environment) {
Properties properties = new Properties();
for (String fileName : FILE_NAMES) {
File propertyFile = (home != null) ? new File(home, configPath + fileName) : null;
if (propertyFile != null && propertyFile.exists() && propertyFile.isFile()) {
addProperty(propertyFile, environment, fileName, properties);
}
}
return properties;
}
private void addProperty(File propertyFile, ConfigurableEnvironment environment, String fileName,
Properties properties) {
FileSystemResource resource = new FileSystemResource(propertyFile);
try {
PropertiesLoaderUtils.fillProperties(properties, resource);
environment.getPropertySources().addFirst(new PropertiesPropertySource("devtools-local", properties));
}
catch (IOException ex) {
throw new IllegalStateException("Unable to load " + fileName, ex);
}
}
protected File getHomeFolder() {
String home = System.getProperty("user.home");
if (StringUtils.hasLength(home)) {