最近看了一下项目中的配置感觉很乱,写出一些自己对项目配置的想法,与大家交流。
集中管理的目标:
1:所有节点的配置都集中在一个节点(配置节点)生成、发布、刷新,通过配置模板实现节点的差异化配置达到资源的合理利用
2:配置本身(包括配置文件等)集中在同一目录下,而不是散落在应用的各个角落,从而方便运维人员进行配置
3:开发人员对配置的读取,采用统一的读取方法,而不是各行其道,从而实现对配置的管控,方便以后对配置这边做统一的处理,如缓存、刷新等。
技术特点:
1:通过root.xml 检索配置,不需要把配置文件硬编码在代码中,root.xml 样例
<configs>
<config name="test" path="test.xml" type="xml" cacheable="true"></config>
</configs>
2:通过规则配置文件实现对配置文件的解析,而不需要写java代码,例如 root.xml 对应的规则配置文件为 rules-root.xml,其内如如下
<?xml version="1.0" encoding="UTF-8"?>
<digester-rules> <pattern value="configs"> <object-create-rule classname="com.asiainfo.base.config.Configs"></object-create-rule> </pattern> <pattern value="configs/config"> <object-create-rule classname="com.asiainfo.base.config.Config" /> <set-properties-rule> <alias attr-name="cacheable" prop-name="cacheAble" /> </set-properties-rule> <set-properties-rule> <alias attr-name="name" prop-name="name" /> </set-properties-rule> <set-properties-rule> <alias attr-name="path" prop-name="path" /> </set-properties-rule> <set-properties-rule> <alias attr-name="type" prop-name="type" /> </set-properties-rule> <set-next-rule methodname="addConfig" /> </pattern> </digester-rules>
3:通过统一的配置工厂类实现对配置的读取 ConfigFactory.createConfig("test");
4:支持多种类型的配置如xml、properties、数据库等