diff --git a/src/main/java/redis/clients/jedis/JedisCluster.java b/src/main/java/redis/clients/jedis/JedisCluster.java index bec2574..72f72c0 100644 --- a/src/main/java/redis/clients/jedis/JedisCluster.java +++ b/src/main/java/redis/clients/jedis/JedisCluster.java @@ -5,6 +5,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import redis.clients.jedis.BinaryClient.LIST_POSITION; public class JedisCluster implements JedisCommands, BasicCommands { @@ -25,12 +26,28 @@ public class JedisCluster implements JedisCommands, BasicCommands { this(nodes, DEFAULT_TIMEOUT); } - public JedisCluster(Set jedisClusterNode, int timeout, + public JedisCluster(Set nodes, int timeout, int maxRedirections) { - this.connectionHandler = new JedisSlotBasedConnectionHandler( - jedisClusterNode); - this.timeout = timeout; - this.maxRedirections = maxRedirections; + this(nodes, timeout, maxRedirections, + new GenericObjectPoolConfig()); + } + + public JedisCluster(Set nodes, + final GenericObjectPoolConfig poolConfig) { + this(nodes, DEFAULT_TIMEOUT, DEFAULT_MAX_REDIRECTIONS, poolConfig); + } + + public JedisCluster(Set nodes, int timeout, + final GenericObjectPoolConfig poolConfig) { + this(nodes, timeout, DEFAULT_MAX_REDIRECTIONS, poolConfig); + } + + public JedisCluster(Set jedisClusterNode, int timeout, + int maxRedirections, final GenericObjectPoolConfig poolConfig) { + this.connectionHandler = new JedisSlotBasedConnectionHandler( + jedisClusterNode, poolConfig); + this.timeout = timeout; + this.maxRedirections = maxRedirections; } @Override diff --git a/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java b/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java index d30b5f7..24f4349 100644 --- a/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java +++ b/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java @@ -1,5 +1,7 @@ package redis.clients.jedis; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; + import java.util.HashMap; import java.util.Map; import java.util.Random; @@ -9,12 +11,14 @@ public abstract class JedisClusterConnectionHandler { protected Map nodes = new HashMap(); protected Map slots = new HashMap(); + final protected GenericObjectPoolConfig poolConfig; abstract Jedis getConnection(); abstract Jedis getConnectionFromSlot(int slot); - public JedisClusterConnectionHandler(Set nodes) { + public JedisClusterConnectionHandler(Set nodes, final GenericObjectPoolConfig poolConfig) { + this.poolConfig = poolConfig; initializeSlotsCache(nodes); } @@ -24,7 +28,7 @@ public abstract class JedisClusterConnectionHandler { private void initializeSlotsCache(Set nodes) { for (HostAndPort hostAndPort : nodes) { - JedisPool jp = new JedisPool(hostAndPort.getHost(), + JedisPool jp = new JedisPool(poolConfig, hostAndPort.getHost(), hostAndPort.getPort()); this.nodes.put(hostAndPort.getHost() + hostAndPort.getPort(), jp); Jedis jedis = jp.getResource(); @@ -40,7 +44,7 @@ public abstract class JedisClusterConnectionHandler { String localNodes = jedis.clusterNodes(); for (String nodeInfo : localNodes.split("\n")) { HostAndPort node = getHostAndPortFromNodeLine(nodeInfo, jedis); - JedisPool nodePool = new JedisPool(node.getHost(), node.getPort()); + JedisPool nodePool = new JedisPool(poolConfig, node.getHost(), node.getPort()); this.nodes.put(node.getHost() + node.getPort(), nodePool); populateNodeSlots(nodeInfo, nodePool); } diff --git a/src/main/java/redis/clients/jedis/JedisRandomConnectionHandler.java b/src/main/java/redis/clients/jedis/JedisRandomConnectionHandler.java index d4e558e..e13f227 100644 --- a/src/main/java/redis/clients/jedis/JedisRandomConnectionHandler.java +++ b/src/main/java/redis/clients/jedis/JedisRandomConnectionHandler.java @@ -1,11 +1,18 @@ package redis.clients.jedis; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; + import java.util.Set; public class JedisRandomConnectionHandler extends JedisClusterConnectionHandler { public JedisRandomConnectionHandler(Set nodes) { - super(nodes); + super(nodes, new GenericObjectPoolConfig()); + } + + public JedisRandomConnectionHandler(Set nodes, + final GenericObjectPoolConfig poolConfig) { + super(nodes, poolConfig); } public Jedis getConnection() { diff --git a/src/main/java/redis/clients/jedis/JedisSlotBasedConnectionHandler.java b/src/main/java/redis/clients/jedis/JedisSlotBasedConnectionHandler.java index 36c04ed..35674fa 100644 --- a/src/main/java/redis/clients/jedis/JedisSlotBasedConnectionHandler.java +++ b/src/main/java/redis/clients/jedis/JedisSlotBasedConnectionHandler.java @@ -1,5 +1,7 @@ package redis.clients.jedis; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; + import java.util.Set; public class JedisSlotBasedConnectionHandler extends @@ -7,8 +9,9 @@ public class JedisSlotBasedConnectionHandler extends private Jedis currentConnection; - public JedisSlotBasedConnectionHandler(Set nodes) { - super(nodes); + public JedisSlotBasedConnectionHandler(Set nodes, + final GenericObjectPoolConfig poolConfig) { + super(nodes, poolConfig); } public Jedis getConnection() {