可能是JFinal 2.2的一个bug?

发布于 2021-11-29 21:53:09 字数 2685 浏览 928 评论 4

@JFinal 你好,想跟你请教个问题:

使用Tomcat + Maven的方式, 同样的代码在2.0可以启动成功,在2.2就启动失败~

代码如下:

package mycompany.project.main;

import java.io.File;
import java.nio.file.Paths;

import org.elasticsearch.client.Client;

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.ext.handler.ContextPathHandler;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.redis.RedisPlugin;
import mycompany.project.constants.SAConstants;
import mycompany.project.utils.ESUtils;
import mycompany.project.utils.MiscUtils;

public class DefaultConfig extends JFinalConfig {

	
	// 定义一个ElasticSearch的client,后面共用
	public static Client ES_CLIENT = null;
	
	@Override
	public void configConstant(Constants me) {
		me.setDevMode(true);
		me.setEncoding("UTF-8");
		me.setFreeMarkerTemplateUpdateDelay(0);
		
		
		File propFile = Paths.get( PathKit.getRootClassPath(), "app.properties").toFile();
		System.out.println("PropFile :" + propFile.exists());
		loadPropertyFile(propFile);
		
		ES_CLIENT = ESUtils.initEsClient();
	}
	
	@Override
	public void configRoute(Routes me) {
	}
	
	@Override
	public void configPlugin(Plugins me) {
		// this redis is used to store skyaid related content
		String REDIS_HOST = PropKit.get("redis_host");
		RedisPlugin bbsRedis = new RedisPlugin(SAConstants.REDIS_CACHENAME, REDIS_HOST);
		me.add(bbsRedis);
	}

	@Override
	public void configInterceptor(Interceptors me) {
		
	}
	
	@Override
	public void configHandler(Handlers me) {
		// TODO Auto-generated method stub
		me.add(new ContextPathHandler("ctx_path")); // <base href="${ctx_path}/"/> in page
	}
	
	@Override
	public void beforeJFinalStop() {
		if(ES_CLIENT != null) {
			ES_CLIENT.close();
			ES_CLIENT = null;
		}
		super.beforeJFinalStop();
	}

}



错误提示:

java.lang.IllegalStateException: Load propties file by invoking PropKit.use(String fileName) method first.
但是在loadProperty之前打印的语句已经提示可以找到文件了~ 

这是遇到错误的时候pom 关于jfinal的部分:

<dependency>
	<groupId>com.jfinal</groupId>
	<artifactId>jfinal</artifactId>
	<version>2.2</version>
</dependency>



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

岁吢 2021-12-01 23:34:02

jfinal 自开源以后,用户量一直猛增,而用户的场景数越来越多,需求也越来越多,反馈越来越多就多,发布版本必定也会多。有生命力的项目必定是一直进化发展的,没有终点

琴流音 2021-12-01 23:11:12

引用来自“JFinal”的评论

    这个是 jfinal 2.1 版本改进后的功能,JFinalConfig.loadPropertyFile(...) 方法中不再使用 PropKit.use(...) 来加载属性文件,相当于一个解耦合的改进,详见 jfinal 2.1 发布的 changelog 第 30 条:http://www.oschina.net/news/69461/jfinal-2-1-released

   解决方法极度简单,如果前面使用 loadPropertyFile(...),则后续一直使用 getXxx(...)。如果前面使用的 PropKit.use(...),则后续才可以使用 PropKit.getXxx(...)

噩梦成真你也成魔 2021-12-01 13:38:16

非常感谢! 大爱Jfinal 哈哈

深巷少女 2021-11-30 12:50:30

    这个是 jfinal 2.1 版本改进后的功能,JFinalConfig.loadPropertyFile(...) 方法中不再使用 PropKit.use(...) 来加载属性文件,相当于一个解耦合的改进,详见 jfinal 2.1 发布的 changelog 第 30 条:http://www.oschina.net/news/69461/jfinal-2-1-released

   解决方法极度简单,如果前面使用 loadPropertyFile(...),则后续一直使用 getXxx(...)。如果前面使用的 PropKit.use(...),则后续才可以使用 PropKit.getXxx(...)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文