diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index cf614f956..e91bfc499 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -223,13 +223,22 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return execute(new RedisCallback>() { public List doInRedis(RedisConnection connection) throws DataAccessException { connection.openPipeline(); - Object result = action.doInRedis(connection); - if (result != null) { - throw new InvalidDataAccessApiUsageException( - "Callback cannot returned a non-null value as it gets overwritten by the pipeline"); + boolean pipelinedClosed = false; + try { + Object result = action.doInRedis(connection); + if (result != null) { + throw new InvalidDataAccessApiUsageException( + "Callback cannot returned a non-null value as it gets overwritten by the pipeline"); + } + List pipeline = connection.closePipeline(); + pipelinedClosed = true; + return SerializationUtils.deserialize(pipeline, resultSerializer); + + } finally { + if (!pipelinedClosed) { + connection.closePipeline(); + } } - List pipeline = connection.closePipeline(); - return SerializationUtils.deserialize(pipeline, resultSerializer); } }); }