3
回答
请教一个JFinal配置文件加载的问题

@JFinal 你好,想跟你请教个问题:在JFinal的web应用里,loadPropertyFile和EhCachePlugin 默认都是从web根目录下的WEB-INF里去查找文件的。为什么不实现从classpath里去加载呢?这个在用maven的时候特别不方便,因为maven默认的编译输出路径不在webapp的WEB-INF/classes 里,这时启动jetty,是找不到resouces里的配置文件的。我目前的解决方案是配置maven-resources-plugin,拷贝一份resouces里的资源文件webapp的WEB-INFO/classes 里,这样就可以读取到resouces里的配置了。

当然,对于非maven工程,是没问题的,配置读取资源文件的路径为WEB-INF里的classes即可。

我想,我们一般都是把资源文件放在classpath及其子目录的吧?

举报
Neoman
发帖于4年前 3回/5K+阅

以下是问题补充:

  • @Neoman :当然,ehcache在不指定配置文件的时候,会自动从classpath里查找ehcache.xml文件 (4年前)
共有3个答案 最后回答: 4年前


     EhCachePlugin 如果不指定配置文件,会默认在 classpath 里面去找配置文件,这个行为是 EhCache 默认的。

    loadPropertyFile 是历史原因,JFinal 在 2011 年开始应用于公司项目中,当时没有使用maven管理项目。

    即便如此也很容易解决问题,JFinal 提供了 PathKit.getRootClassPath() 方法可以很方便地得到classPath,在使用 EhCachePlugin 或 loadPropertyFile 时可以这样加载classPath 下的配置文件:

new EhCachePlugin(PathKit.getRootClassPath()+"/ehcache.xml");
loadPropertyFile(PathKit.getRootClassPath()+"/config.txt");


--- 共有 3 条评论 ---
JFinal回复 @Neoman : 的确需要改进,要判断你的参数是否为绝对路径,目前你可以这样解决:loadPropertyFile("classes/my_config.txt"); 4年前 回复
Neoman紧急,今天试了一下,似乎有问题,因为loadProperties的时候,不管怎么样,都要加上PathKit.getWebRootPath(),见com.jfinal.config.JFinalConfig.loadPropertyFile(String) 方法 4年前 回复
Neoman感谢回复,JFinal,perfect!! 4年前 回复

这样还是有问题 loadPropertyFile(PathKit.getRootClassPath()+"/db.properties"); 

报错:java.lang.IllegalArgumentException: Properties file not found: E:\git_repository\jeemis\jeemis\jeemis-web\src\main\webapp\WEB-INF\E:\git_repository\jeemis\jeemis\jeemis-web\target\classes/db.properties



引用来自“hanfeng”的评论

这样还是有问题 loadPropertyFile(PathKit.getRootClassPath()+"/db.properties"); 

报错:java.lang.IllegalArgumentException: Properties file not found: E:\git_repository\jeemis\jeemis\jeemis-web\src\main\webapp\WEB-INF\E:\git_repository\jeemis\jeemis\jeemis-web\target\classes/db.properties



我也是遇到这个错误,路径明显是有WEB-INF和classes两个

@JFinal

--- 共有 1 条评论 ---
JFinal使用 loadPropertyFile("classes/db.properties"); 4年前 回复
顶部