jfinal redis blpop 为空的情况下报错

blpop 超时后返回为空,然后就报nullpointer了

image.png

评论区

JFinal

2019-05-21 10:45

单步调试找到哪个对象为 null, 分分钟就解决了,一般是配置不对

aaaaaaa

2019-05-21 14:23

@JFinal 返回null值是正常的,应为用了blpop 超时后返回的值。我的意思这里报nullpoint错误不应该了

JFinal

2019-05-21 14:41

这两行代码是:
List《byte[]》 data = jedis.blpop(timeout, keysToBytesArray(keys));
return keyValueListFromBytesList(data);

如果改成下面的是否满足你的需求:
List《byte[]》 data = jedis.blpop(timeout, keysToBytesArray(keys));
if (data != null) {
return keyValueListFromBytesList(data);
} else {
return null;
}

如果可以,下个版本改进这里。此外,还有没有另外的地方有类似的需求?

aaaaaaa

2019-05-21 16:04

@JFinal 对的,是这样子的。

aaaaaaa

2019-05-21 16:04

@JFinal 现在我必须在外层加个try catch

JFinal

2019-05-21 16:23

@aaaaaaa 目前你可以创建一个 public MyCache extends Cache 在子类里面覆盖 blpop 方法,改成前面我提供的 if 判断的方式,然后配置一下即可:
Redis.setMainCache(new MyCache());

jfinal 几乎所有部分都是可以扩展的

aaaaaaa

2019-05-23 11:19

Redis.setMainCache(new MyCache());
这一句是放在afterstart里面么?还是其他阶段?

aaaaaaa

2019-09-25 19:07

这个问题最新版好像还没有修改