能不能调整一下加载sql模板的顺序或则给arp提供一个自定义加载sql模板顺序

我们现在遇到一个问题,产品会提供一套默认的sql查询语句模板,打包的时候会打包到jar里。

但不同的用户对某个查询可能会有些许差别,这样就需要新建一个sql模板放到编译后的config目录下。

但现在jfinal是优先加载jar里的sql模板,如果jar里有,就不再去config目录下加载自定义sql模板了。

像我们这样优先去加载用户自定义的sql模板,如果没有才去加载jar里打包的默认SQL模板,就玩不转了。或则是不是可以考虑给arp提供一个配置加载sql模板先后顺序的方法,配置某个arp是优先加载jar里的还是优先加载config目录下的。请波总考虑一下!


评论区

杜福忠

2025-11-17 17:40

在模板获取处判断一下就了:
arp.getEngine().setSourceFactory((baseTemplatePath, fileName, encoding) -> {
FileSource fileSource = new FileSource(baseTemplatePath, fileName, encoding);
if (new File(fileSource.getFinalFileName()).exists()){
return fileSource;
}
return new ClassPathSource(baseTemplatePath, fileName, encoding);
});

杜福忠

2025-11-17 17:44

我们有租户项目是直接把模板内容放到了 数据库,自定义的DbSource,非常适合在线动态管理

zzutligang

2025-11-18 11:29

@杜福忠 这个判断的方式挺好,我测试一下,再来反馈!

zzutligang

2025-11-21 09:41

@杜福忠 经过测试,确实可行。不过需要在FileSource fileSource = new FileSource(baseTemplatePath, fileName, encoding);这行代码里做点修改,直接按这行代码,jfinal始终找不到fileName指定的模板文件,我是拼接了完整路径才找到的。不知道是我没做对,还是其他什么原因。

杜福忠

2025-11-21 10:45

@zzutligang 找不到文件,就是baseTemplatePath和fileName参数没设置对了,调试一下就看见了。
建议你们干脆把sql模板全放config目录算了,jar里面别放模板了。有需要修改的时候直接改config目录里面,只有一份文件也不怕找错,JF代码也不用改啥东西。
再说JF启动的sh脚本config 目录在 lib/* 之前,classLoader.getResource(finalFileName)也是优先找config文件了。

热门反馈

扫码入社