maven引入方式
<dependency>
<groupId>icu.liufuqiang</groupId>
<artifactId>spring-cloud-easy-config-starer</artifactId>
<version>0.1.0</version>
</dependency>
仓库地址
https://gitee.com/LiuFqiang/spring-cloud-easy-config
介绍
在单体架构中我们一般将配置写在配置文件中,但有一个缺点是每次修改配置都需要重启服务才能生效,如果是集群多个节点修改某个配置重启全部节点达到最终修改的状态,需要花费一定的时间,
所以才有了动态配置的一些组件比如Nacos,借助服务端,再将客户端集成到项目中,通过客户端与服务端交互来达到配置的动态更新,但是对于一些小型的项目,完全没有必要集成nacos,需要额外部署服务端,
springcloud EasyConfig达到了最轻量级来实现配置的动态刷新,不需要服务端,只需要借助jdbc将配置存储在数据库中。
原理描述
因为是springboot项目,所以通过spring的生命周期来扩展,因为有一些bean需要借助与配置文件的内容,比如spring datasource,还有一些配置将影响spring容器及bean的加载,所以首次加载项目外的配置文件这个过程是整个生命周期最早的一步
所以我们可以借助ApplicationContextInitializer,在spring上下文刷新之前做各种准备工作,将远程的配置放入Environment中,这样容器加载的时候里面的配置信息等同于项目application.yml扫描到的配置;
SpringBoot2.4.0之后引入了ConfigData专门用来加载远程的配置信息,不过还是借助spring的生命周期,EnvironmentPostProcessor,Environment后置处理器,在spring环境变量准备好之前是还未开始自动配置之前,应该是最早的一个扩展点,
所以可以在这个地方加载远程的配置信息,进而引导spring的正常创建
当数据库里的配置文件发送变化,会借助springcloud的RefreshEvent事件以及@RefreshScope注解进行配置的动态刷新,也不是所有的配置都可以动态刷新,只有bean属性的配置才可以刷新。