关于com.jfinal.kit.Prop的一些修改建议

由于很多基于Jfinal的框架读取配置文件调用的是 PropKit.use(String fileName)  的原因,例如jboot,这里讨论下这个构造器

public Prop(String fileName, String encoding){

    ....

    inputStream = getClassLoader().getResourceAsStream(fileName);

    ....

}

直接在classpath下找文件,如果我想扩展成从本地文件或者Git来统一管理配置文件呢?

我的建议:增加一个常量配置:是否是从classpath读配置,默认是。配置成否,则把传入的fileName当作绝对路径来读取文件

这样的话老版本也是兼容的,一般人不去配置这个选项就不会有影响,但是对扩展很有用

由于jboot是调用Jfinal的方法读取配置文件,我不能让那其作者改,所以我建议波总做这个扩展

PS:我项目使用的Jboot,现在有个需求,从Git读配置文件,先clone到本地,然后再在本地读配置文件。

     现在的做法是用javaasist动态修改了Prop的构造器,显然是这样不好的,下个版本移掉javaasist库就看波总了





评论区

JFinal

2018-05-29 21:48

这个需求早就满足了,使用里头的带 java.io.File 参数的方法就可了,例如:
PropKit.use(new File("/var/config_center/myapp.config.txt"));

使用 File 参数,就可以使用任意路径下的文件了

jimchow

2018-05-30 12:01

@JFinal 波总,我用的jboot, 而jboot内部使用的是PropKit.use(String fileName) ,我不能强行把jboot的源码改成PropKit.use(new File("/var/config_center/jboot.properties"))。后续我如果还用了某个基于jfinal的框架,它使用了PropKit.use(String fileName),我还得去改它的源码

JFinal

2018-05-30 14:52

@jimchow 给 jboot 作者提 issue,让添加一下支持 File 参数的方法

jfinal 已经支持了这个方法,剩下的就是看你怎么去用了

jimchow

2018-05-30 17:38

@JFinal 波总,用jfinal的项目那么多,不可能给每个项目都提issue啊,我给你提pr好吗

jimchow

2018-05-30 17:49

@JFinal Constants 加个开关 classpathProp = true;
if( classpathProp ){
inputStream = getClassLoader().getResourceAsStream(fileName);
}else{
inputStream = new FileInputStream(fileName);
}

JFinal

2018-05-30 17:49

@jimchow 关键是我还没有时间了解 jboot

JFinal

2018-05-30 17:52

@jimchow 不能加开关, jfinal 的 Prop、PropKit 本年就已经支持两种模式的配置文件读取,既支持 class path 下的读取,也支持 File 的读取,加个开关是冗余设计

jimchow

2018-05-30 17:54

@JFinal 您不用管jboot, 加个常量,做个判断就好,spring也有通过 file:// classpath://来决定从哪读资源, jfinal 就做简单点

jimchow

2018-05-30 17:59

@JFinal 我加俱乐部吧

热门反馈

扫码入社