网页怎么配置一个常量_降龙-第3章:配置中心

122cd0ba0dbe235dc19e5c14b5814017.png

来看一个我项目中的配置文件,是改造后的百度富文本插件配置文件,如下:

84dac6d5f0c38c91fdc05b4731ad73b0.png
百度富文本配置文件

从原始的properties配置文件开始改造,让配置文件支持配置层次结构,就是类似一些日志框架的配置一样,我写了一个方法对properties配置文件的key支持链式和数组配置,这样就可以让properties文件的配置看起来像是json一样,可以方便地把properties配置内容转换成配置对象类,后端不需要硬编码写死转换和取值关系了,代码中地取值逻辑和配置完全保持一致。

本次提交还顺便提交了百度富文本插件的一个配置,用过这个配置的朋友可能都知道,百度富文本配置都是用的json格式的,在一些编译器里面json格式没法写注释,否则会编译报错,所以我一怒之下把庞大的百度富文本插件配置文件从json格式转换为properties格式,全部打平看起来舒服多了。后续做这一块插件开发的时候我再引入百度富文本插件改造的过程。

724bae214142ef42bea9d3c4c5681973.png
配置中心的相关代码提交

我们来看一下百度富文本插件在我的网站中经过改造后应用的配置文件的模样。

b6f3b417a0a7cebba90527952a55a879.png

百度出的插件后端Java版本也存在很多硬编码,然后各种散乱的文件定义,毕竟都是职场人员做的东西,按照需求开发拿的工资干的活,我个人觉得整个插件缺少点艺术气息,虽然前端代码部分有很多bug被我修复了,但是本次只讨论后端部分内容,所以对百度这一坨要引入的乱代码我全部重写了一变。本次只涉及配置相关功能,我就只展示下配置对象。

来说一下思路,首先我定义了一个常量类,里面硬性存储了配置文件夹和文件名。

7641a9154bbef94cbe46bfdef9f795a4.png
常量定义类

看到最后四个定义是关于配置文件的,目前只要是properties配置格式的,只要在Const类里面配置好文件名,然后定义好实体类,然后在写一个获取配置的方法就可以用起来了,如下:

1754f72a761a0e73cf243dbdcd578372.png
获取配置方法

当然配置的加载读取也是根据Const类来硬编码写死做的类转换,毕竟配置文件嘛,没有太多的业务逻辑要涉入。后续要集成其它插件的配置做成JavaBean对象的模式,只需要定义好常量,然后查看之前的配置的引用,编辑相似代码即可,依样画葫芦就把配置集成做好了。

其实像spring那要加载读取配置文件都是硬编码写死的,我这边是用到了常量定义,所有配置也是根据配置文件名称缓存到内存的,做法都是大同小异,只不过做成JavaBean对象的模式对编程更加友好一点。

讨论一点技术,我们来看下改造后的配置功能有什么亮点?

e198fc0b8d9000a5b6163fc799e780d6.png
properties配置文件转换成JavaBean对象

利用JSON对象来处理properties对象转换为JavaBean对象。我们只需要处理好链式操作的"."和数组"[]"的两种特殊情况,映射到JavaBane对象上就子对象和集合、数组类成员变量。

首先整个配置文件最终都肯定只能映射成一个JavaBean对象,所以方法的一个入参就固定为JSONObject类型用来接收所有配置项的写入,然后针对每一对key-value的配置,分别讨论当前key是对象类型还是数组类型,如果是对象类型,判断当前对象是否已经存在,不存在则创立空对象并赋值,然后对当前对象做key的后续部分做链式配置;如果是数组类型则需要取出当前数组配置的索引值,这里要注意的一点是,如果配置顺序随意写的,那就需要把配置数组类型的key做特殊处理,所以这里会判断索引值和数组长度做判断,不足的会把索引值补全,这里只支持一层数组对象配置,不支持数组里面嵌套数组配置。

此外,配置中心把所有配置的加载方法都集中调用了,为了一个目的,就是在Java的编译工具中跑Main方法或者单元测试的时候,在读取配置的方法中判断了如果没有配置则会主动去加载所有配置,保持和运行项目的环境一致。这样一来,在调试本地代码时如果用到配置获取的方法则不需要硬编码写死配置值了,直接调用获取配置方法即可完成测试代码的开发。

配置集中管理,我想这一点要在传统的spring框架下开发很难做到,很多测试代码的运行依赖Bean对象,必须启动容器才可以实现测试代码的逻辑跑通,而在我的工程里面,不需要启动容器也可以完成所有代码的调用,这点我会在后续的自研mvc框架中讲述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值