java绝地武士(redis)无法连接

vcirk6k6  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(398)

我正在尝试使用java应用程序中的jedis连接到redis。我正在示例化一个jedispool对象,当我得到资源时,它抛出一个异常,说它不能返回资源。但奇怪的是,如果我只是示例化一个jedis对象,它连接起来没有问题,我可以更改数据。
下面是我的Redis数据库类:

package me.joeleoli.proxylink.database;

import me.joeleoli.proxylink.ProxyLink;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class RedisDatabase {

    private JedisPool pool;

    public RedisDatabase(String host, int port, String password) {
        ProxyLink.getInstance().getLogger().info("Attempting to establish Redis connection " + host + ":" + port);

        this.pool = new JedisPool(host, port);

        try (Jedis jedis = this.pool.getResource()) {
            if (password != null && !password.equals("")) {
                jedis.auth(password);
            }

            jedis.select(0);
            jedis.close();
        }
    }

    public JedisPool getPool() {
        return this.pool;
    }

}

我的错误是:

22:16:15 [INFO] [ProxyLink] Attempting to establish Redis connection 127.0.0.1:6379
22:16:15 [WARNING] Exception encountered when loading plugin: ProxyLink
redis.clients.jedis.exceptions.JedisException: Could not return the resource to the pool
    at redis.clients.jedis.JedisPool.returnResource(JedisPool.java:106)
    at redis.clients.jedis.JedisPool.returnResource(JedisPool.java:12)
    at redis.clients.jedis.Jedis.close(Jedis.java:3206)
    at me.joeleoli.proxylink.database.RedisDatabase.<init>(RedisDatabase.java:23)
    at me.joeleoli.proxylink.ProxyLink.onEnable(ProxyLink.java:71)
    at net.md_5.bungee.api.plugin.PluginManager.enablePlugins(PluginManager.java:227)
    at net.md_5.bungee.BungeeCord.start(BungeeCord.java:273)
    at net.md_5.bungee.BungeeCordLauncher.main(BungeeCordLauncher.java:111)
    at net.md_5.bungee.Bootstrap.main(Bootstrap.java:15)
Caused by: redis.clients.jedis.exceptions.JedisException: Could not return the resource to the pool
    at redis.clients.util.Pool.returnResourceObject(Pool.java:61)
    at redis.clients.jedis.JedisPool.returnResource(JedisPool.java:103)
    ... 8 more
Caused by: java.lang.IllegalStateException: Object has already been returned to this pool or is invalid
    at org.apache.commons.pool2.impl.GenericObjectPool.returnObject(GenericObjectPool.java:551)
    at redis.clients.util.Pool.returnResourceObject(Pool.java:59)
    ... 9 more
vwkv1x7d

vwkv1x7d1#

代码的问题是调用 jedis.close() 在try with资源块中。try with resource块在退出时关闭资源。因为您已经关闭了资源,所以在块退出之前,您会调用close两次。
删除对的呼叫 jedis.close 在块中使用try with resource功能。

相关问题