【已解决】统一SQL管理与动态生成功能使用时找不到sql文件

使用统一SQL管理与动态生成功能,在src下增加了.sql文件(编译后自动到WEB-INF/classes下),并且在configPlugin(Plugins me)方法中注册arp.addSqlTemplate("report.sql");

然而在启动时报一下异常,请问还需要设置哪些参数?

Caused by: java.lang.RuntimeException: File not found : null/report.sql

at com.jfinal.template.source.FileSource.getContent(FileSource.java:70)

at com.jfinal.template.Engine.buildTemplateBySourceFactory(Engine.java:153)

at com.jfinal.template.Engine.getTemplate(Engine.java:138)

at com.jfinal.plugin.activerecord.sql.SqlKit.parseSqlTemplate(SqlKit.java:92)

at com.jfinal.plugin.activerecord.ActiveRecordPlugin.start(ActiveRecordPlugin.java:224)

at com.jfinal.core.Config.startPlugins(Config.java:107)

增加:

11.png

找到问题所在了,原来我配置在configEngine()方法中,这个Engine不是ActiveRecordPlugin使用的,在问道中找到了这段:

jfinal 中的 configEngine(Engine me) 中配置的 Engine 对象是用于 Controller.render(...) 方法的渲染,而 ActiveRecordPlugin.getEngine() 对象是用于 sql 管理功能模块,这两个 Engine 对象是两个不同的实例,互相之间没有干扰,配置方式也不同



结帖吧,终于搞定了


评论区

芦苇

2018-05-28 16:41

我加上了me.setSourceFactory(new ClassPathSourceFactory());依然时这个错误

芦苇

2018-05-28 16:46

我跟了一下好像是baseTemplatePath这个参数为null,但是这个参数应该怎么给呢?
com.jfinal.template.Engine.buildTemplateBySourceFactory(String fileName)这个方法里面config.getBaseTemplatePath()的值时null,奇怪,这里没有默认值的吗?

JFinal

2018-05-28 17:43

@芦苇 配置一下即可:
arp.getEngine().setToClassPathSourceFactory();

注意,这个配置要放在 arp.addSqlTemplate(...) 之前,否则次序不对

芦苇

2018-05-29 15:43

@JFinal OK,谢谢波总