`

redis从2.1.0升级到2.6.0报错:java.lang.NoSuchMethodError

 
阅读更多
项目中使用了jedis-2.1.0.jar,现在升级为jedis-2.6.0,在初始化资源池时,总是报如下错误。
private JedisPool pool = new JedisPool(config, host, port, timeout, null, dbIndex); //这句报错。

引用
Caused by: java.lang.NoSuchMethodError: redis.clients.jedis.JedisPool.<init>(Lorg/apache/commons/pool/impl/GenericObjectPool$Config;Ljava/lang/String;IILjava/lang/String;)V


原因是因为:在2.6.0版本中,JedisPool缺少对应参数的构造函数,所以报上述错误,代码如下
jedisPool = new JedisPool(getPoolConfig(), redisServerHost, redisServerPort, timeout, redisAuthKey);


ommons-pool2-2.2.jar、jedis-2.6.0 都引入项目中了。

private static void initialPool()
    {
        ResourceBundle rb = ResourceBundle.getBundle("init");
        // 数据库,默认为0,目前总共为16个库
        // 读取配置文件中的数据库,默认为0,目前总共为16个库
        int dbIndex = Integer.parseInt(rb.getString("redis.dbindex"));
        // 读取配置文件中的IP地址
        String host = rb.getString("redis.host");
        // 读取配置文件中的端口号
        int port = Integer.parseInt(rb.getString("redis.port"));
        // 读取配置文件中的超时时间
        int timeout = Integer.parseInt(rb.getString("redis.timeout"));
        // 最大分配的对象数
        int maxActive = Integer.parseInt(rb.getString("redis.maxActive"));
        // 最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制
        int maxIdle = Integer.parseInt(rb.getString("redis.maxIdle"));
        // 当池内没有返回对象时,最大等待时间
        int maxWait = Integer.parseInt(rb.getString("redis.maxWait"));
        // 当调用borrow Object方法时,是否进行有效性检查
        String testOnBorrow = rb.getString("redis.testOnBorrow");
        boolean onBorrow = false;
        if (testOnBorrow.equals("true"))
        {
            onBorrow = true;
        }
       
      org.apache.commons.pool2.impl.GenericObjectPoolConfig  config = new org.apache.commons.pool2.impl.GenericObjectPoolConfig ();
      //连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
      config.setBlockWhenExhausted(true);
      
      //设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数)
      config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
      
      //是否启用pool的jmx管理功能, 默认true
      config.setJmxEnabled(true);
      
      //MBean ObjectName = new ObjectName("org.apache.commons.pool2:type=GenericObjectPool,name=" + "pool" + i); 默认为"pool", JMX不熟,具体不知道是干啥的...默认就好.
      config.setJmxNamePrefix("pool");
      
      //是否启用后进先出, 默认true
      config.setLifo(true);
      
      //最大空闲连接数, 默认8个
      config.setMaxIdle(maxIdle);
      
      //最大连接数, 默认8个
      config.setMaxTotal(maxActive);
      
      //获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
      config.setMaxWaitMillis(maxWait);
      
      //逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
      config.setMinEvictableIdleTimeMillis(1800000);
      
      //最小空闲连接数, 默认0
      config.setMinIdle(0);
      
      //每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
      config.setNumTestsPerEvictionRun(3);
      
      //对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数 时直接逐出,不再根据MinEvictableIdleTimeMillis判断  (默认逐出策略)  
      config.setSoftMinEvictableIdleTimeMillis(1800000);
      
      //在获取连接的时候检查有效性, 默认false
      config.setTestOnBorrow(false);
      
      //在空闲时检查有效性, 默认false
      config.setTestWhileIdle(false);
      
      //逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
      config.setTimeBetweenEvictionRunsMillis(-1);
      
      private JedisPool pool = new JedisPool(config, host, port, timeout, null, dbIndex);
    }

Caused by: java.lang.NoSuchMethodError: redis.clients.jedis.JedisPool.<init>(Lorg/apache/commons/pool2/impl/GenericObjectPoolConfig;Ljava/lang/String;IILjava/lang/String;I)V
at com.zk.common.util.Redis.initialPool(Redis.java:126)
at com.zk.common.util.Redis.getJedis(Redis.java:162)
at com.zk.common.util.Redis.lrange(Redis.java:813)
at com.zk.adms.router.AdmsDataRouter.polling(AdmsDataRouter.java:192)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:264)
... 3 more

参考:http://bbs.csdn.net/topics/390887579
分享到:
评论

相关推荐

    BEWINDOWEB#bewindoweb.github.io#00078-编写basedao的时候报错:java.lang.C

    编写basedao的时候报错:java.lang.Class cannot be cast to java.lang.reflect.Parameterized

    java.lang.NoSuchMethodError异常处理要点.doc

    在Java编程中,`java.lang.NoSuchMethodError`异常是一个运行时异常,通常发生在程序试图执行一个不存在的方法时。这个异常的出现通常意味着编译时和运行时的类版本不匹配,或者是在编译期间存在而运行时不存在的...

    jedis-3.3.0.jar

    java.lang.NoSuchMethodError: redis.clients.jedis.ScanResult.getStringCursor()Ljava/lang/String; at org.crazycake.shiro.WorkAloneRedisManager.keys(WorkAloneRedisManager.java:149) at org.crazycake....

    解决报错-org.springframework.data.redis.serializer.SerializationExce

    解决报错_org.springframework.data.redis.serializer.SerializationException_ Could not write_read JSON

    spring-data-redis-2.0.9.RELEASE-API文档-中英对照版.zip

    标签:springframework、data、spring、redis、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...

    rubygem-sensu-redis-2.1.0-2.el7.noarch.rpm

    官方离线安装包,亲测可用

    redis-2.1.0 和commons-pool-1.5.6 Java测试redis values 类型

    在这个"redis-2.1.0"版本中,我们可以探讨如何通过Java进行Redis的集成和基础操作。 首先,`commons-pool-1.5.6`是一个Apache开源项目,提供了对象池化的服务,可以用于管理数据库连接池或其他资源池。在Redis的...

    Linux bash:./xxx:无法执行二进制文件报错

    到此这篇关于Linux bash:./xxx:无法执行二进制文件报错的文章就介绍到这了,更多相关Linux 无法执行二进制文件 内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!...

    Redis集群下过期key监听的实现代码

    1. 前言 在使用redis集群时,发现过期key始终监听不到。网上也没有现成的解决方案。于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听。...redis.host3: 10.113.56.6

    一次OOM问题排查过程实战记录

    Exception in thread http-nio-8080-exec-1027 java.lang.OutOfMemoryError: Java heap space Exception in thread http-nio-8080-exec-1031 java.lang.OutOfMemoryError: Java heap space 看线程名称应该是tomcat的...

    redis连接报错error:NOAUTH Authentication required

    Redis 连接报错 Error:NOAUTH Authentication required 解决方案 Redis 是一个开源的、基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理中间件。然而,在使用 Redis 时,可能会遇到各种错误,例如 ...

    spring-boot-redis-annotation-demo:spring boot —— redis 缓存注解使用示例项目

    spring boot —— redis 缓存注解使用教程 示例项目地址: 依赖 在pom文件添加如下依赖 &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-data-redis ...spring.redis.pool.max-idle: 8

    ServiceStack.Redis-5.8无限制.zip

    8. **主从复制**:在高可用性环境中,Redis通常会配置为主从模式。ServiceStack.Redis支持主从切换,确保即使主节点故障,服务仍能继续运行。 9. **Lua脚本支持**:Redis支持在服务器端执行Lua脚本,ServiceStack....

    redis-64.3.0.503 64位redis安装文件,直接运行批处理安装

    3. **redis.windows.conf**:Redis的配置文件,用于设置服务器的各项参数。 4. **批处理文件**:如`install.bat`和`uninstall.bat`,分别用于一键安装和卸载Redis服务。 安装Redis-64.3.0.503的步骤通常如下: 1. ...

    spring-data-redis-2.3.9.RELEASE-API文档-中文版.zip

    标签:springframework、data、spring、redis、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...

    spring-session-data-redis-2.0.4.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-session-data-redis-2.0.4....标签:springframework、session、spring、data、redis、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文

    rubygem-sensu-redis-doc-2.1.0-2.el7.noarch.rpm

    官方离线安装包,亲测可用

    Redis 安装菜鸟教程.docx

    4. 启动 Redis 服务:打开 cmd 窗口,切换到 C:\redis 目录下,运行 redis-server.exe redis.windows.conf 命令启动 Redis 服务。 5. 访问 Redis 服务:打开另一个 cmd 窗口,切换到 redis 目录下,运行 redis-cli....

    redis-3.2.12.tar.gz和redis-3.3.3.gem.zip

    完成后,Redis服务器(`redis-server`)和客户端(`redis-cli`)将被安装到指定位置。 `redis-3.3.3.gem`是Redis的一个Ruby gem包,版本为3.3.3。Ruby gem是Ruby语言的包管理器,用于方便地安装和管理Ruby库。这个...

    spring + redis + sentinel 配置

    通过`Properties`对象(从`redis.properties`加载)配置它,以便获取服务器信息。 ```xml &lt;bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"&gt; ...

Global site tag (gtag.js) - Google Analytics