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