JedisConnectionException: Could not get a resource from the pool

版本声明

在这里插入图片描述

问题介绍

将配置了redis连接池的项目部署到服务器上构建docker镜像后启动容器,发现使用redis时一直报如下错误.
部分日志如下:

2020-03-17 08:56:47.345 [http-nio-6008-exec-1] ERROR c.z.e.common.handler.ResponseExceptionHandler - redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
	redis.clients.util.Pool.getResource(Pool.java:53)
	redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)
	com.zhaolaobao.ebankpay.common.redis.service.impl.RedisServiceImpl.domain(RedisServiceImpl.java:100)
	com.zhaolaobao.ebankpay.common.redis.service.impl.RedisServiceImpl.getString(RedisServiceImpl.java:55)
	com.zhaolaobao.ebankpay.qrpay.service.impl.QrPayServiceImpl.getQrPay(QrPayServiceImpl.java:89)

在这里插入图片描述
但是本地启动项目、打jar包本地java -jar运行、服务器上java -jar运行,都没问题

项目jedisPool配置

在这里插入图片描述

源码 debug

查看一下位置(根据自己的配置类得到源码位置):
org.apache.commons.pool2.impl.GenericObjectPool#GenericObjectPool(org.apache.commons.pool2.PooledObjectFactory, org.apache.commons.pool2.impl.GenericObjectPoolConfig)
在这里插入图片描述
配置好远程debug后,在服务器启动项目时,也启动本地的remote连接,等待redis配置初始化,进入此断点时,查看factory:
在这里插入图片描述
此时可以排查自己的 hostAndPort 与 password 是否正确;

原因以及解决方案

密码后面的 “$q”丢了? 密码居然变了???

排查后发现,redis密码中有个“&”的特殊符号!!!
博主本想是通过docker-compose.yml配置环境变量注入的,后来才发现密码中的这个 $ 会导致从docker-compose.yml中取值时发送这样的问题;

那么docker-compose.yml中是否可以使用 ‘$’ 来解决此问题呢?在这里插入图片描述
然而 $符号以及后面的还是没了。

最后:
1、此密码还是老老实实的写在项目里把,不能通过环境变量注入了!!成功解决
2、或者修改密码后(不要带有‘$’ 这种特殊符号了),成解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值