JedisException: Could not get a resource from the pool


項目中使用jedis客戶端操作redis

		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>

  

代碼沒有變更,換個環境本地運行異常:

redis.clients.jedis.exceptions.JedisException: Could not get a resource from the pool
	at redis.clients.util.Pool.getResource(Pool.java:51)
	at redis.clients.jedis.ShardedJedisPool.getResource(ShardedJedisPool.java:36)
Caused by: java.util.NoSuchElementException: Unable to validate object
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:495)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:362)
    at redis.clients.util.Pool.getResource(Pool.java:49)

首先確定網絡可通,linux防火牆開放了端口。

然后使用自帶的redis-cli.exe連接

提示NOAUTH Authentication required.

明顯是設置了密碼。

於是查看配置文件找到 requirepass,確定設置了密碼。

通過驗證密碼,客戶端使用正常。

 

順藤摸瓜找到Jedis的配置 ShardedJedisPool 

JedisShardInfo有password屬性

此項需要根據實際redis的配置密碼的情況設置password,如果拿到的密碼為空,則不設置即可。

參考代碼:

 @Bean
    public ShardedJedisPool getJedisPool() {

        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxTotal(maxTotal);
        jedisPoolConfig.setMinIdle(minIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWait);
        jedisPoolConfig.setTestOnBorrow(true);
        jedisPoolConfig.setTestOnReturn(true);
        jedisPoolConfig.setBlockWhenExhausted(false);

        JedisShardInfo jedisShardInfo = new JedisShardInfo(host, port);
        if(!ToolUtil.isEmpty(password)){
            jedisShardInfo.setPassword(password);
        }

        List<JedisShardInfo> list = new LinkedList<JedisShardInfo>();
        list.add(jedisShardInfo);
        return  new ShardedJedisPool(jedisPoolConfig, list);
    }

  

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM