2
回答
可能是JFinal 2.2的一个bug?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

@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>



举报
YangWenjun
发帖于2年前 2回/1K+阅
共有2个答案 最后回答: 2年前

    这个是 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(...)

--- 共有 1 条评论 ---
YangWenjun非常感谢! 大爱Jfinal 哈哈 2年前 回复

引用来自“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(...)

你的jFinal 发布了很多版本

我的Pexcel 数据库代码基本上完全没有动过

--- 共有 1 条评论 ---
JFinaljfinal 自开源以后,用户量一直猛增,而用户的场景数越来越多,需求也越来越多,反馈越来越多就多,发布版本必定也会多。有生命力的项目必定是一直进化发展的,没有终点 2年前 回复
顶部