1、代码入口

image.png

2、Environment代码继承关系

SpringBoot-Environment类图.png

3、构建流程

1、创建ConfigurableEnvironment实例对象,在父类的构造函数中,已经将System.getenv()和System.getProperties()的参数都添加进来了。参照:AbstractEnvironment#customizePropertySources()
image.png
2、添加各种类型数据的解析器,添加容器的默认配置,添加main方法中的String[] args
3、将当前环境中已有的配置用ConfigurationPropertySourcesPropertySource进行包装,并addFirst。不知道干啥用
4、 发布环境准备完成事件:ApplicationEnvironmentPreparedEvent,触发监听器
5、将默认配置移到最后 addLast
6、 装配以spring.main前缀开头的配置项 ?不太确定

4、总结

  • System.getenv()和System.getProperties()的参数都可以从spring环境中获取到
  • ApplicationEnvironmentPreparedEvent事件发布时,spring环境中只有System系统配置,其他配置项尚未加载进来。