diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java
index e8846edee..5f1d9cf08 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java
@@ -44,6 +44,7 @@ import redis.clients.jedis.JedisPubSub;
import redis.clients.jedis.SortingParams;
import redis.clients.jedis.Transaction;
import redis.clients.jedis.ZParams;
+import redis.clients.util.Pool;
/**
* {@code RedisConnection} implementation on top of Jedis library.
@@ -62,6 +63,8 @@ public class JedisConnection implements RedisConnection {
private final Jedis jedis;
private final Client client;
private final BinaryTransaction transaction;
+ private final Pool pool;
+
private volatile JedisSubscription subscription;
@@ -71,10 +74,23 @@ public class JedisConnection implements RedisConnection {
* @param jedis Jedis entity
*/
public JedisConnection(Jedis jedis) {
+ this(jedis, null);
+ }
+
+ /**
+ *
+ * Constructs a new JedisConnection instance backed by a jedis pool.
+ *
+ * @param jedis
+ * @param pool can be null, if no pool is used
+ */
+ public JedisConnection(Jedis jedis, Pool pool) {
this.jedis = jedis;
// extract underlying connection for batch operations
client = (Client) ReflectionUtils.getField(CLIENT_FIELD, jedis);
transaction = new Transaction(client);
+
+ this.pool = pool;
}
protected DataAccessException convertJedisAccessException(Exception ex) {
@@ -90,6 +106,20 @@ public class JedisConnection implements RedisConnection {
@Override
public void close() throws UncategorizedRedisException {
+ // return the connection to the pool
+ try {
+ if (pool != null) {
+ pool.returnResource(jedis);
+ }
+ } catch (Exception ex) {
+ pool.returnBrokenResource(jedis);
+ }
+
+ if (pool != null) {
+ return;
+ }
+
+ // else close the connection normally
try {
if (isQueueing()) {
client.quit();
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java
index e857a559c..092e7c9b2 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java
@@ -115,7 +115,8 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean,
}
public JedisConnection getConnection() {
- return new JedisConnection(fetchJedisConnector());
+ Jedis jedis = fetchJedisConnector();
+ return (usePool ? new JedisConnection(jedis, pool) : new JedisConnection(jedis));
}
@Override
diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/CollectionTestParams.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/CollectionTestParams.java
index c302240c2..e3c7d87f5 100644
--- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/CollectionTestParams.java
+++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/CollectionTestParams.java
@@ -35,7 +35,7 @@ public abstract class CollectionTestParams {
ObjectFactory personFactory = new PersonObjectFactory();
JedisConnectionFactory jedisConnFactory = new JedisConnectionFactory();
- jedisConnFactory.setUsePool(false);
+ jedisConnFactory.setUsePool(true);
jedisConnFactory.setPort(SettingsUtils.getPort());
jedisConnFactory.setHostName(SettingsUtils.getHost());