系统配置信息解决方案
系统的配置信息如何管理是一个普遍问题,阿里的AutoConfig是一个不错的方案
配置信息管理存在的问题
一般来说,系统都会有配置文件,以往管理配置信息存在以下几个问题
配置信息分散
以spring为例,配置信息可以保存到单独的placeholder里;logback也有自己的配置文件logback.xml;其他第三方库,也定义了自己的配置文件。
那么就需要配置多个地方,没法集中管理。
切换环境缺少统一方案
配置文件往往需要对应多套环境,比如开发环境、测试环境、生产环境,都需要不同的配置信息。切换环境还要改配置文件,显然不是最优方案。
缺少默认值和校验
漏填配置信息也是常见问题,经常直到启动甚至运行时才发现配置信息缺失。比较理想的方式是在构建时就检查,发现配置信息缺失的问题。
AutoConfig的解决方案
AutoConfig是一个基于Velocity的配置文件生成工具。在AutoConfig自己的配置文件auto-config.xml里,定义了所有的配置项、默认值、文件模板、目标文件路径。开发者把配置信息写在antx.properties里,然后AutoConfig会读取其中的参数,渲染模板生成最终的配置文件。
至于为什么配置文件叫做antx.properties,这是个历史遗留问题。最初的时候AutoConfig是作为antx的一个子项目开发的,后来才独立出来。事实上antx是一个鸡肋的设计,已经被摒弃了,但是AutoConfig反而被更多人接受。
AutoConfig首先会收集所有的auto-config.xml里的配置信息的key,然后与antx.properties里的配置项进行比对;如果找不到antx.properties,或者其中的配置项有缺失,则会提示是否要更新配置信息,然后把默认值填到antx.properties里
接下来会读取这些配置信息,根据文件模板,渲染得到最终的配置文件
动态配置的问题
如上,AutoConfig是一个build time的解决方案。对于动态配置的需求,它无法很好地满足,需要跟config server等方案结合使用。