为什么Spring Boot 1.4.x不加载spring.profiles:profile1,默认(带空格)

时间:2017-08-22 05:04:02

标签: spring spring-boot

我有以下配置(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.x1.5.x之间的差异,SpringProfileDocumentMatcher内有一个名为org.springframework.boot.yaml的班级封装

我想知道在SpringProfileDocumentMatcher类中从Spring引导1.4.x1.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.x1.5.x之间获得不同结果的主要原因吗?或者我在这个分析中遗漏了什么?

希望你能帮我解决这个疑问。

谢谢。

0 个答案:

没有答案