发现由于根config配置加载顺序引发的问题

波总好,发现由于根config配置加载顺序引发的问题

配置一 重写验证码缓存实现

blob.png

配置二 初始化验证码缓存插件

blob.png


配置一中实现类:

blob.png


在类中有声明成员变量captchaCache并初始化赋值 为 redis缓存库对象为空,猜测应该是赋值时redis还未初始化






评论区

JFinal

2017-09-27 21:36

确实会碰到这个初始化次序的事情,最简单的办法是将 Redis.use(...) 放在 put 方法内部

还有一个办法是通过一个 static Constants constants 属性在 configConstant(Constants me) 中通过下面的代码将 me 存起来:
constants = me;

然后创建一个方法来操作:
public void afterJFinalStart() {
constants.setCaptchaCache(...);
}

afterJFinalStart() 的说明见 jfinal 手册

WJME

2017-09-28 15:05

@JFinal 哈哈,已采用如下方式:

public void afterJFinalStart() {
try {
JFinal.me().getConstants().setCaptchaCache(new RedisCaptchaCache());
RedisCaptchaCache.setCaptchaCache(Redis.use("captcha"));

} catch (TemplateModelException e) {
e.printStackTrace();
}
}

JFinal

2017-09-28 22:49

@WJME 这个用法也挺好的

WJME

2017-09-30 08:56

@JFinal 建议波总默认多加一些序列化的实现,如

/**
* 验证码
*/
public class Captcha 类

在做一些服务化框架和缓存处理时没办法直接用,还需创建子类再实现序列化使用

WJME

2017-09-30 08:57

@JFinal 框架中应该蛮多地方可以加一些的

JFinal

2017-09-30 11:07

@WJME 序列化的实现与 Captcha 类没有关系,已实现的序列化方式自然已支持 Captcha 类,否则那就太不通用了

JFinal

2017-09-30 11:10

@WJME 刚看了一下 Captcha 源代码,貌似忘了实现 Serializable 接口了,jfinal 3.3 已添加该实现

WJME

2017-10-16 14:58

波总威武

热门反馈

扫码入社