RedisPlugin的一点点不妥的地方

对于RedisPlugin的使用过程中,如果redis没有设置密码,怎么指定dbindex呢。

构造方法中

public RedisPlugin(String cacheName, String host, int port, int timeout, String password, int database)  这个如果密码为空,设置了database,那么就报错password不能为空。。

评论区

JFinal

2017-05-23 19:10

RedisPlugin 构造时的参数有很多,如果要添加对这些参数的重载方法,参数组合起来绝成的构造方法数量非常之庞大

因此,jfinal 选择了只添加认为比较常用的构造方法的组合,如果这些组合不能满足开发者需求,可以使用那个参数最多的构造方法使用。是麻烦了点

IvyHelen

2017-05-24 11:21

@JFinal 使用参数最多的那个构造方法的话,中间有任何一个参数为null了,都会报错的。 为何不能不提供那么多构造了,直接到暴漏给JedisPool, 只有一个构造方法,可以传入null,然后让JedisPool处理,我看了看JedisPool是支持前面参数为null,后面指定dbindex的。

IvyHelen

2017-05-24 11:26

public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port,
int timeout, final String password, final int database, final String clientName) {
super(poolConfig, new JedisFactory(host, port, timeout, password, database, clientName));
}

这个方法中的后面的password,database等都支持为null的。

JFinal

2017-05-24 12:19

@IvyHelen 开发这个插件的时候,当时并不知道 password 与 database 都支持 null值,只能确定这两个参数可以不传递,站在 jfinal 的角度,如果某个参数可以不传递,最好还是认为 redis 内部是有默认值去处理,而如果 jfinal 允许 null 值,可能会覆盖掉 redis 内部的默认值

你可以当成是一种防御性编程习惯,刚刚已经将 RedisPlugin 中所有属性改为 protected 了,后续版本便于大家继承并扩展自己需要的构造方法

目前的情况下,建议通过建议继承 RedisPlugin 并 copy 一下 start() stop() 这两个方法中的代码来实现,再自建一个满足自己需求的构造方法

IvyHelen

2017-05-25 15:35

热门反馈

扫码入社