转载

jedis高版本的JedisPoolConfig没有maxActive和maxWait

通过maven pom下载新版jedis jar包,包括2.3.1,2.4.1等高版本jedis,当我们试图按照以前的方式配置maxActive属性时,或者spring配置文件传入redis.pool.maxActive,项目启动会报错,原因是jedis高版本的JedisPoolConfig没有maxActivemaxWait属性。

jedis包括2.4.1,2.5.1等高版本的JedisPoolConfig没有maxActive属性,不能按照网上那些方式去配置redis了,网上大部分搜索出来的redis配置都是基于旧版本的jedis,在jedis新版本,JedisPoolConfig没有maxActive属性,JedisPoolConfig没有maxWait属性

我的版本是2.7.3

这里写图片描述

构造连接池配置文件,但是让我十分纠结的就是,setMaxActive提示没这个方法

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxIdle" value="${redis.pool.maxIdle}" />
    <property name="maxActive" value="${redis.pool.maxActive}" />
    <property name="maxWait" value="${redis.pool.maxWait}" />
    <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
</bean> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

查看源码JedisPoolConfig继承至GenericObjectPoolConfig,其父类中确实也没有MaxActive这个属性

这里写图片描述

然而我们也可以看到,redis新版本依赖的连接池版本是

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.3</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

那么redis2.3之前的版本是什么情况呢,我这里尝试使用下2.2.1版本

这里写图片描述

可以发现连接池版本已经是

<dependency>
    <groupId>commons-pool</groupId>
    <artifactId>commons-pool</artifactId>
    <version>1.6</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

原来Apache 在2.0版本以上已经做了一次升级

那之前的旧版本肯定没问题了,查看源码JedisPoolConfig继承至 org.apache.commons.pool.impl.GenericObjectPool.Config

能够看到之前会报错的maxActivemaxWait属性。

那么新版本替换成了什么呢

通过这个链接,我们知道commons-pool2 的maxactive,maxWait已经更改命名。 
http://mail-archives.apache.org/mod_mbox/tomcat-dev/201403.mbox/<20140305154712.6B9E123889E2@eris.apache.org>

dbcp的修改日志显示:change “maxActive” -> “maxTotal” and “maxWait” -> “maxWaitMillis”

所以高版本jedis配置JedisPoolConfig的maxActive,maxWait应该为:

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxIdle" value="${redis.pool.maxIdle}" />
    <property name="maxTotal" value="${redis.pool.maxActive}" />  
    <property name="maxWaitMillis" value="${redis.pool.maxWait}" /> 
    <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
</bean>
正文到此结束
Loading...