「造个轮子」——cicada 设计一个配置模块(下)

简介: 在前两次的 cicada 版本中其实还不支持读取配置文件,比如对端口、路由的配置。 因此我按照自己的想法创建了一个 issue ,同时将 cicada 升级到了 v1.0.2。

查询出来之后自然是要进行遍历同时反射创建对象。


由于之前已经调用了

super.setPropertiesName("redis.properties");

来赋值配置文件名称,所以还需要在遍历过程中将 Properties 进行赋值。


同时在这里也体现出优先读取的是 VM 启动参数中的配置文件。


String systemProperty = System.getProperty(conf.getPropertiesName());



需要额外提一点的是:在查找所有用户自定义的配置管理类时需要手动将 cicada 内置的ApplicationConfiguration 加入其中。


因为使用应用的包名通过反射是查询不出该类的。


保存自定义配置管理


为了方便用户在使用时候可以随意的读取各个配置文件,所以还需要将反射创建的对象保存到一个内部缓存中,核心代码就是上上图中的这段代码:


// add configuration cache
ConfigurationHolder.addConfiguration(aClass.getName(), conf);


其中 ConfigurationHolder 的定义如下。



其实也是利用一个 Map 来存放这些对象。


这样在使用时候只需要取出即可。


KafkaConfiguration configuration = (KafkaConfiguration) getConfiguration(KafkaConfiguration.class);
String brokerList = configuration.get("kafka.broker.list");


重构


本次升级同时还重构了部分代码,比如启动类。


现在看上去要清爽和直接的多:



其中也有一点需要注意的地方。


大家如果查看日志的话会发现应用启动之后会打印本次的耗时,自然就是在启动时候记录一个时间,初始化完毕之后记录一个即可。



在之前的实现中由于都是在一个方法内,所以直接使用就行了。


但现在优化之后跨越了不同的方法和类,难道要把时间作为参数在各个方法之前传递嘛?


那未免太不优雅了。


所以 ThreadLocal 就有了发挥余地。


在初始化的方法中我将当前时间写入:


ThreadLocalHolder.setLocalTime(System.currentTimeMillis());


在最后记录日志的地方直接取出比较即可:



这样使用起来就完全不需要管什么参数传递了。


同时 ThreadLocalHolder 的定义:



这里还是有一点需要注意,在这种长生命周期的容器中一定得要记得及时清除


我这里的时间在查询一次之后就不用了,所以完全放心的在 getLocalTime() 方法中删掉。


总结


这就是本次 v1.0.2 中的升级内容,包含了配置支持以及代码重构。其中有些内容我觉得对接触少的同学来说还是挺有帮助的。


关于上两次的版本介绍请查看这里:




相关文章
|
存储 前端开发 JavaScript
潮玩宇宙大逃杀无聊猿卷轴模式系统开发详细规则丨步骤需求丨方案项目丨技术架构丨源码功能
确定游戏类型和规则:明确无聊猿卷轴模式游戏类型和游戏规则,包括敌人类型、地图设计、任务类型、战斗机制等。
|
2月前
|
设计模式 网络协议 网络架构
软件工程师,学会封装不香么
软件工程师,学会封装不香么
31 0
|
3月前
|
前端开发 Java UED
JSF 面向组件开发究竟藏着何种奥秘?带你探寻可复用 UI 组件设计的神秘之路
【8月更文挑战第31天】在现代软件开发中,高效与可维护性至关重要。JavaServer Faces(JSF)框架通过其面向组件的开发模式,提供了构建复杂用户界面的强大工具,特别适用于设计可复用的 UI 组件。通过合理设计组件的功能与外观,可以显著提高开发效率并降低维护成本。本文以一个具体的 `MessageComponent` 示例展示了如何创建可复用的 JSF 组件,并介绍了如何在 JSF 页面中使用这些组件。结合其他技术如 PrimeFaces 和 Bootstrap,可以进一步丰富组件库,提升用户体验。
54 0
|
NoSQL 算法 MongoDB
使用项目驱动学习编程的诀窍
使用项目驱动学习编程的诀窍
171 0
|
前端开发 算法 数据处理
前端基础向~从项目出手封装工具函数
前端基础向~从项目出手封装工具函数
162 0
|
缓存 Java API
「造个轮子」——cicada 设计一个配置模块(上)
在前两次的 cicada 版本中其实还不支持读取配置文件,比如对端口、路由的配置。 因此我按照自己的想法创建了一个 issue ,同时将 cicada 升级到了 v1.0.2。
|
Web App开发 JSON JavaScript
仅20+行核心代码的Chrome插件,这不是有手就行吗?(上)
大家好,我是零一,不知道你们有没有开发过Chrome插件,但你们一定用得很多。其实Chrome插件的开发一点都不麻烦,基本就是有手就行,一个功能极简的插件核心代码也就不过30行左右。那你还怕不会插件的开发吗? 本文将手把手(真 · 手把手)介绍Chrome插件的开发,并末尾附带一个插件实战教学
395 0
仅20+行核心代码的Chrome插件,这不是有手就行吗?(上)
|
安全 UED
陪玩平台源码具有哪些优点,开发怎样实现
陪玩平台源码不仅实现陪玩下单、多人聊天等功能,还实现了用户直播、礼物打赏、快速匹配等功能,丰富系统功能,满足用户更多需求。