Fix loading of devtools yaml files
Fixes gh-19081
This commit is contained in:
@@ -19,18 +19,23 @@ package org.springframework.boot.devtools.env;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.devtools.system.DevToolsEnablementDeducer;
|
||||
import org.springframework.boot.env.EnvironmentPostProcessor;
|
||||
import org.springframework.boot.env.PropertiesPropertySourceLoader;
|
||||
import org.springframework.boot.env.PropertySourceLoader;
|
||||
import org.springframework.boot.env.YamlPropertySourceLoader;
|
||||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
import org.springframework.core.env.PropertiesPropertySource;
|
||||
import org.springframework.core.env.PropertySource;
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.core.io.support.PropertiesLoaderUtils;
|
||||
import org.springframework.util.ClassUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
@@ -52,6 +57,17 @@ public class DevToolsHomePropertiesPostProcessor implements EnvironmentPostProce
|
||||
|
||||
private static final String CONFIG_PATH = "/.config/spring-boot/";
|
||||
|
||||
private static final Set<PropertySourceLoader> PROPERTY_SOURCE_LOADERS;
|
||||
|
||||
static {
|
||||
Set<PropertySourceLoader> propertySourceLoaders = new HashSet<>();
|
||||
propertySourceLoaders.add(new PropertiesPropertySourceLoader());
|
||||
if (ClassUtils.isPresent("org.yaml.snakeyaml.Yaml", null)) {
|
||||
propertySourceLoaders.add(new YamlPropertySourceLoader());
|
||||
}
|
||||
PROPERTY_SOURCE_LOADERS = Collections.unmodifiableSet(propertySourceLoaders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
|
||||
if (DevToolsEnablementDeducer.shouldEnable(Thread.currentThread())) {
|
||||
@@ -88,15 +104,23 @@ public class DevToolsHomePropertiesPostProcessor implements EnvironmentPostProce
|
||||
private void addPropertySource(List<PropertySource<?>> propertySources, FileSystemResource resource,
|
||||
Function<File, String> propertySourceNamer) {
|
||||
try {
|
||||
Properties properties = PropertiesLoaderUtils.loadProperties(resource);
|
||||
String name = propertySourceNamer.apply(resource.getFile());
|
||||
propertySources.add(new PropertiesPropertySource(name, properties));
|
||||
for (PropertySourceLoader loader : PROPERTY_SOURCE_LOADERS) {
|
||||
if (canLoadFileExtension(loader, resource.getFilename())) {
|
||||
propertySources.addAll(loader.load(name, resource));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IOException ex) {
|
||||
throw new IllegalStateException("Unable to load " + resource.getFilename(), ex);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean canLoadFileExtension(PropertySourceLoader loader, String name) {
|
||||
return Arrays.stream(loader.getFileExtensions())
|
||||
.anyMatch((fileExtension) -> StringUtils.endsWithIgnoreCase(name, fileExtension));
|
||||
}
|
||||
|
||||
protected File getHomeFolder() {
|
||||
String home = System.getProperty("user.home");
|
||||
if (StringUtils.hasLength(home)) {
|
||||
|
||||
Reference in New Issue
Block a user