File not found : /sqlserver.sql 是有这个sql文件的,但是还是报错 ,求大神指教

Exception starting filter jfinal
java.lang.RuntimeException: Plugin start error: com.jfinal.plugin.activerecord.ActiveRecordPlugin. 
File not found : "F:/mystudy_04_web1/day10-JDBC高级与XML/资料/tomcat/apache-tomcat-7.0.69/webapps/lirPCMS/WEB-INF/classes/sqlserver.sql"
	at com.jfinal.core.Config.startPlugins(Config.java:137)
	at com.jfinal.core.Config.configPluginWithOrder(Config.java:71)
	at com.jfinal.core.Config.configJFinal(Config.java:56)
	at com.jfinal.core.JFinal.init(JFinal.java:61)
	at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:63)
	at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4908)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5602)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1260)
	at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:2002)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: File not found : "F:/mystudy_04_web1/day10-JDBC高级与XML/资料/tomcat/apache-tomcat-7.0.69/webapps/lirPCMS/WEB-INF/classes/sqlserver.sql"
	at com.jfinal.template.source.ClassPathSource.<init>(ClassPathSource.java:67)
	at com.jfinal.template.source.ClassPathSourceFactory.getSource(ClassPathSourceFactory.java:29)
	at com.jfinal.template.Engine.buildTemplateBySourceFactory(Engine.java:157)
	at com.jfinal.template.Engine.getTemplate(Engine.java:144)
	at com.jfinal.plugin.activerecord.sql.SqlKit.parseSqlTemplate(SqlKit.java:93)
	at com.jfinal.plugin.activerecord.ActiveRecordPlugin.start(ActiveRecordPlugin.java:224)
	at com.jfinal.core.Config.startPlugins(Config.java:128)
	... 20 more

二月 28, 2019 5:34:57 下午 org.apache.catalina.core.StandardContext startInternal
严重: One or more Filters failed to start. Full details will be found in the appropriate container log file
二月 28, 2019 5:34:57 下午 org.apache.catalina.core.StandardContext startInternal
严重: Context [/lirPCMS] startup failed due to previous errors

2019-02-28 17:34:57
[ERROR]-[Thread: localhost-startStop-1]-[com.jfinal.core.Config.startPlugins()]: Plugin start error: com.jfinal.plugin.activerecord.ActiveRecordPlugin. 
File not found : "F:/mystudy_04_web1/day10-JDBC高级与XML/资料/tomcat/apache-tomcat-7.0.69/webapps/lirPCMS/WEB-INF/classes/sqlserver.sql"
java.lang.IllegalArgumentException: File not found : "F:/mystudy_04_web1/day10-JDBC高级与XML/资料/tomcat/apache-tomcat-7.0.69/webapps/lirPCMS/WEB-INF/classes/sqlserver.sql"
	at com.jfinal.template.source.ClassPathSource.<init>(ClassPathSource.java:67)
	at com.jfinal.template.source.ClassPathSourceFactory.getSource(ClassPathSourceFactory.java:29)
	at com.jfinal.template.Engine.buildTemplateBySourceFactory(Engine.java:157)
	at com.jfinal.template.Engine.getTemplate(Engine.java:144)
	at com.jfinal.plugin.activerecord.sql.SqlKit.parseSqlTemplate(SqlKit.java:93)
	at com.jfinal.plugin.activerecord.ActiveRecordPlugin.start(ActiveRecordPlugin.java:224)
	at com.jfinal.core.Config.startPlugins(Config.java:128)
	at com.jfinal.core.Config.configPluginWithOrder(Config.java:71)
	at com.jfinal.core.Config.configJFinal(Config.java:56)
	at com.jfinal.core.JFinal.init(JFinal.java:61)
	at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:63)
	at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4908)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5602)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1260)
	at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:2002)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
	
	
	
	
	
	
	
@Override
	public void configPlugin(Plugins me) {
		// 配置C3p0数据库连接池插件
		DruidPlugin druidPlugin = createDruidPlugin();
		druidPlugin.setDriverClass(PropKit.get("driver"));

		me.add(druidPlugin);

		// 配置ActiveRecord插件
		ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
		arp.setDialect(new SqlServerDialect());

		/*DruidPlugin druidPlugin2 = new DruidPlugin(PropKit.get("jdbcUrl2"),
				PropKit.get("user"), PropKit.get("password").trim());
		druidPlugin2.setDriverClass(PropKit.get("driver"));
		me.add(druidPlugin2);
		ActiveRecordPlugin arp2 = new ActiveRecordPlugin("db2", druidPlugin2);
		arp2.setDialect(new SqlServerDialect());
		arp2.setShowSql(true);
		me.add(arp2);*/

		// 所有映射在 MappingKit 中自动化搞定
		arp.setBaseSqlTemplatePath(PathKit.getRootClassPath());
		arp.addSqlTemplate("sqlserver.sql");
		arp.setShowSql(true);
		_MappingKit.mapping(arp);		
		me.add(arp);
	


评论区

JFinal

2019-02-28 17:45

删除 arp.setBaseSqlTemplatePath(PathKit.getRootClassPath()) 即可

对呀

2019-02-28 17:48

JFinal配置有点不明其意,还要深入了解,谢谢波总

JFinal

2019-02-28 17:55

@对呀 这块只要了解 enjoy 引擎就知道了,因为这个就是对 enjoy 引擎进行配置而已

对呀

2019-03-01 11:24

@JFinal 那如何配置这个.sql文件呐

对呀

2019-03-01 11:25

@JFinal 配置.sql文件就会报找不到,但是这个文件是存在的

JFinal

2019-03-01 11:29

arp.setBaseSqlTemplatePath(null);
arp.addSqlTemplate("xxx.sql");

注意最后的 : arp.addSqlTemplate("xxx.sql") 根据你的目录来,例如,你将 xxx.sql 放在 src/main/resources 的根目录下,就直接;
arp.addSqlTemplate("xxx.sql");

假如放在 src/main/resources/abc/def 目录下面,则:
arp.addSqlTemplate("/abc/def/xxx.sql");

对呀

2019-03-01 11:36

@JFinal // 所有映射在 MappingKit 中自动化搞定
arp.setBaseSqlTemplatePath(PathKit.getRootClassPath());
arp.addSqlTemplate("sqlserver.sql");
arp.setShowSql(true);
_MappingKit.mapping(arp);
me.add(arp);
嗯嗯,解决了,但是不知道为什么,写的和原来的是一样的,现在不报错了,但是以前是报错额,代码没有动

JFinal

2019-03-01 11:44

@对呀 jfinal 3.6 版本有关于 sql 管理的 engine 配置为:
arp.getEngine().setSourceFactory(new ClassPathSourceFactory());

而 3.6 版本之前的配置为:
arp.getEngine().setSourceFactory(new FileSourceFactory());

注意 ClassPathSourceFactory 与 FilePathSourceFactory 的区别,前者是从 class path 以及 jar 包中读取 sql, 后者是从普通的目录下面读 sql

一定要看一下 jfinal 3.6 的升级说明:
https://www.jfinal.com/doc/14-1

也一定要弄清楚 ClassPathSourceFactory 与 FilePathSourceFactory 这两者使用的场景:
https://www.jfinal.com/doc/6-2
注意看第 6 小节:从 class path 和 jar 包加载模板配置

JFinal

2019-03-01 11:45

核心在于 active record 模块的 sql 管理使用的是 jfinal enjoy 模板引擎管理的,所以有关的配置都是 enjoy 的配置:
https://www.jfinal.com/doc/6-2

JFinal

2019-03-01 11:46

在 jfinal 3.6 之中,可以去掉下面这行代码:
arp.setBaseSqlTemplatePath(PathKit.getRootClassPath());

因为默认就是去 class path 下去找 sql 模板文件

蓝胖纸

2019-05-31 10:47

@JFinal 我设置了arp.addSqlTemplate("question.sql");然后在 src/main/resources下创建了question.sql文件,但是在启动项目的时候报java.lang.RuntimeException: File not found : null/question.sql,这样又是什么原因呢?

JFinal

2019-05-31 21:32

@蓝胖纸 老版本需要配置:
arp.getEngine().setToClassPathSourceFactory();

这样才会去 class path 下去找 sql 模板

蓝胖纸

2019-06-03 10:53

@JFinal 我这当前版本是jfinal3.3 没有找到setToClassPathSourceFactory方法

JFinal

2019-06-03 11:44

@蓝胖纸 使用 setSourceFactory(new ClassPathSourceFactory()) 完全一样

建议升级到最新版本,因为老版本你还需解决这个问题:
http://www.jfinal.com/share/979

jfinal enjoy 模板引擎的用法这两年没变过,所以可以平滑升级,可以使用独立发布的版本,大概只有 170KB 左右,无第三方依赖

蓝胖纸

2019-06-03 14:34

@JFinal 可以了 谢谢波总

热门反馈

扫码入社