转自 http://blog.csdn.net/running_snail_/article/details/51679538
InvalidURIException: Cannot open Redis connection due invalid URI
自己在windows下开发,连的redis 没有任何问题,部署到Linux 机器上就开始提示Cannot open Redis connection due invalid URI
一开始以为是redis安装的有问题绑定了ip,各种调试试错,发现也么有问题(让自己熟悉安装配置了n次各个版本的redis)
今天 静下心仔细看了报错的异常:
Caused by: redis.clients.jedis.exceptions.InvalidURIException: Cannot open Redis connection due invalid URI. x.x.x.x at redis.clients.jedis.JedisFactory.<init>(JedisFactory.java:37 ) at redis.clients.jedis.JedisPool.<init>(JedisPool.java:94 ) at redis.clients.jedis.JedisPool.<init>(JedisPool.java:89 )
仔细看了源码,发现是自己使用spring初始化JedisPool时未指定结构方法参数的类型导致了,初始化对象时跑到了别的初始化话方法上了
lt;bean id = "jedisPool" class = "redis.clients.jedis.JedisPool" > < constructor-arg index = "0" ref = "poolConfig" /> < constructor-arg index = "1" value = "${redis.host}" type = "java.lang.String" /> < constructor-arg index = "2" value = "${redis.port}" type = "int" /> lt;/bean>
如果constructor-arg 未指定type 初始化的时候JedisPool有两个相同参数个数的构造方法会选择错误,造成类似于这样的错误。
JedisPool(GenericObjectPoolConfig, String, int )
JedisPool(GenericObjectPoolConfig, URI, int )