我有以下配置(application.yml):
spring:
profiles: dev, default
myorg:
myvalue: hello world
现在我想阅读myorg.myvalue
属性
@SpringBootApplication
public class ...... {
.......
@Bean
public CommandLineRunner getRunner(Environment env){
return (args) -> {
System.out.println("myorg.myvalue is:"
+ env.getProperty("myorg.myvalue"));
};
}
我得到了以下输出
myorg.myvalue is: null
但是当我运行相同的应用程序但使用Spring Boot 1.5.x
时,我得到了预期的结果:
myorg.myvalue is: hello world
如果我想在Spring Boot 1.4.x
中获得预期结果,我必须将application.yml
更改为(删除空格)
spring:
profiles: dev,default
myorg:
myvalue: hello world
之后我在github寻找版本1.4.x
和1.5.x
之间的差异,SpringProfileDocumentMatcher
内有一个名为org.springframework.boot.yaml
的班级封装
我想知道在SpringProfileDocumentMatcher
类中从Spring引导1.4.x
到1.5.x
所做的更改是否是我尝试读取属性时得到不同结果的唯一原因。当spring.profiles
在逗号分隔值之间有空格时,场景上的yml文件。
例如,在1.5.x
中的SpringProfileDocumentMatcher
中,有一个名为extractSpringProfiles
的方法可以返回个人资料列表,而spring.profiles property
中的昏迷之间没有空格}。
private List<String> extractSpringProfiles(Properties properties) {
SpringProperties springProperties = new SpringProperties();
MutablePropertySources propertySources = new MutablePropertySources();
propertySources.addFirst(new PropertiesPropertySource("profiles", properties));
PropertyValues propertyValues = new PropertySourcesPropertyValues(
propertySources);
new RelaxedDataBinder(springProperties, "spring").bind(propertyValues);
List<String> profiles = springProperties.getProfiles();
return profiles;
}`
这是我在版本1.4.x
和1.5.x
之间获得不同结果的主要原因吗?或者我在这个分析中遗漏了什么?
希望你能帮我解决这个疑问。
谢谢。