关于读取配置的讨论

JFinal使用PropKit来读取各种资源文件的属性,这势必就会引发一个问题,就是不能快速失败。

实战中一般都会分环境(dev、test、online)配置相同文件名的配置文件,当开发一个功能dev增加了N个属性,等到上线的时候发现报错了,online少配置了一个,导致只能程序跑起来才知道少配置了,Spring中是在EL表达式中进行初始化属性值,当发现找不到属性Key的时候,会快速失败,不让启动,这种做法还是比较可取的。

JFinal是否会考虑今后在框架层面规避这种问题?

评论区

杜福忠

2018-05-11 13:46

你说的这个需求,
在 JFinalConfig 中 configConstant(Constants me) 里面进行配置文件的属性检查就可以了吧 ? 如果不存在就不让启动就可以了.
而且PropKit中还有 appendIfExists这个功能, 这个可以追加线上配置, 会属性覆盖, 比如常见的数据库连接配置, 当线上配置没有属性的话, 会使用你开发的配置, 相当于默认值了

小99

2018-05-11 16:22

@杜福忠 用户自己检查这个没问题,并且比较容易实现,但是我认为这个小细节应该从框架层面去根治

JFinal

2018-05-11 17:28

@小99 这是一个权衡的问题,有些配置是可以不配置的, 不配置的时候使用默认值,那么就需要支持获取配置的时候允许 key 不存在

或许会有什么好的办法解决,如果有好想法随时反馈给我

此外,在程序中也可以一定程度上来避免,例如采用 boolean int long 这种 primitive 类型作为参数类型,就可以在碰到 null 值参数时起到快速失败的作用

JFinal

2018-05-11 17:31

这个问题的确值得考虑,例如可以这样改进:
1:对于带 default 参数的 get 方法,可以让 key 值不存在
2:其它所有 get 方法在获取时,先判断一下 key 值是否存在,如果不存在就抛异常

但这个也会带来点性参损失,或许可以加个开关变量来控制一下

热门反馈

扫码入社