- 获取StandardEnvironment并调用getPropertySources()方法(此处因为要在nacosConfigService读取environment获取鉴权账密之前修改,所以在BeanFactoryPostProcessor的实现类中获取),可通过@Autowire注入,或applicationContext获取
StandardEnvironment e = beanFactory.getSingleton("environment");
- 遍历取得的MutbalePropertySources并用instanceof及propertySource.getName()筛选想要修改的PropertySource
- bootstrap.yml/properties文件class固定为OriginTrackedMapPropertySource,并且无法修改。使用OriginTrackedMapPropertySource.getSource()后取得sourceMap(getSource()获取的map同样是unmodifiyMap)。
- 获取sourceMap.keySet()并遍历sourceMap。
- 通过
environment.getProperty(key) 或 ((OriginTrackedValue)sourceMap.get(key)).getValue()
获取参数原本的值,instanceof判断后进行需要的数据处理(防止boolean被错误转换为string报错)。 - StringValue处理完毕后使用OriginTrackedValue.of(StringValue, oldOriginTrackedValue.getOrigin())方法生成新的OriginTrackedValue。在本次遍历中将所有需要的属性放入newSourceMap中。
- 遍历完毕后 new OriginTrackedMapPropertySource(propertySource.getName(), newSourceMap),并使用MutbalePropertySources.replace()指名替换原有propertySource。