? ? ? ? 本文将会介绍spring的配置模型、配置初始化和动态刷新。
Environment ->
Profile -> active / default
MutablePropertySources -> PropertySourcer -> servlet,system,spring
PropertyResolver -> PropertyConvension
MutablePropertySourcer->? ?多源、List<PropertySource<?>> propertySourceList;
? ? ? ? PropertySourcer -> 配置源
? ? ? ? ConversionService -> 配置转换器
1.命令行参数
java -jar xxx.jar -Da=b
2.Java系统属性
3.操作系统环境变量
tips: 如果使用远程的配置中心,可以在 spring boot PropertySourcer前加入自己的Sourcer
4.spring boot 配置文件
application.yml / application.properties
? ? ? ? Environment中的PropertySourcer是无法更改的,
? ? ? ? 要实现动态更新目前有2种方式
? ? ? ? ? ? ? ? ? ?
一. 绕过environment,environment只在配置初始化做全量。
a.收集@Value对应的字段,维护key与字段(Field,target)关系,
可以通过BeanPostProcessor实现
b.捕捉配置变更,发送spring event,listener通过反射修改对应的字段
? c.提供一个工具类,直接获取配置,如ApolloConfigUtil
二、修改并替换掉PropertySourcer对象
a.通过Environment 获取对应的PropertySourcer对象,并更新对应的字段值。