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 eb9c1d398..cdf6f4364 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 @@ -87,18 +87,6 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation public RedisTemplate() { } - /** - * Constructs a new RedisTemplate instance and automatically initializes the template. - * If other parameters need to be set, it is recommended to use {@link #setConnectionFactory(RedisConnectionFactory)} instead. - * - * @param connectionFactory connection factory for creating new connections - */ - public RedisTemplate(RedisConnectionFactory connectionFactory) { - this.setConnectionFactory(connectionFactory); - afterPropertiesSet(); - } - - @Override public void afterPropertiesSet() { super.afterPropertiesSet(); @@ -126,11 +114,6 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation if (defaultUsed) { Assert.notNull(defaultSerializer, "default serializer null and not all serializers initialized"); } - - valueOps = new DefaultValueOperations(this); - listOps = new DefaultListOperations(this); - setOps = new DefaultSetOperations(this); - zSetOps = new DefaultZSetOperations(this); } @Override @@ -754,11 +737,17 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation @Override public ValueOperations opsForValue() { + if (valueOps == null) { + valueOps = new DefaultValueOperations(this); + } return valueOps; } @Override public ListOperations opsForList() { + if (listOps == null) { + listOps = new DefaultListOperations(this); + } return listOps; } @@ -774,6 +763,9 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation @Override public SetOperations opsForSet() { + if (setOps == null) { + setOps = new DefaultSetOperations(this); + } return setOps; } @@ -784,6 +776,9 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation @Override public ZSetOperations opsForZSet() { + if (zSetOps == null) { + zSetOps = new DefaultZSetOperations(this); + } return zSetOps; } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/StringRedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/StringRedisTemplate.java index 90b22c2d0..29db41807 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/StringRedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/StringRedisTemplate.java @@ -36,6 +36,8 @@ public class StringRedisTemplate extends RedisTemplate { /** * Constructs a new StringRedisTemplate instance. + * {@link #setConnectionFactory(RedisConnectionFactory)} and {@link #afterPropertiesSet()} still need to be called. + * */ public StringRedisTemplate() { RedisSerializer stringSerializer = new StringRedisSerializer(); @@ -46,7 +48,7 @@ public class StringRedisTemplate extends RedisTemplate { } /** - * Constructs a new StringRedisTemplate instance. + * Constructs a new StringRedisTemplate instance ready to be used. * * @param connectionFactory connection factory for creating new connections */ diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/listener/PubSubTestParams.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/listener/PubSubTestParams.java index cba742c7f..bac0d731b 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/listener/PubSubTestParams.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/listener/PubSubTestParams.java @@ -47,7 +47,9 @@ public class PubSubTestParams { jedisConnFactory.afterPropertiesSet(); RedisTemplate stringTemplate = new StringRedisTemplate(jedisConnFactory); - RedisTemplate personTemplate = new RedisTemplate(jedisConnFactory); + RedisTemplate personTemplate = new RedisTemplate(); + personTemplate.setConnectionFactory(jedisConnFactory); + personTemplate.afterPropertiesSet(); // create RJC @@ -58,7 +60,9 @@ public class PubSubTestParams { rjcConnFactory.afterPropertiesSet(); RedisTemplate stringTemplateRJC = new StringRedisTemplate(rjcConnFactory); - RedisTemplate personTemplateRJC = new RedisTemplate(rjcConnFactory); + RedisTemplate personTemplateRJC = new RedisTemplate(); + personTemplateRJC.setConnectionFactory(rjcConnFactory); + personTemplateRJC.afterPropertiesSet(); return Arrays.asList(new Object[][] { { stringFactory, stringTemplate }, { personFactory, personTemplate }, 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 e320a974e..0802607e1 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 @@ -24,6 +24,7 @@ import org.springframework.data.keyvalue.redis.connection.jedis.JedisConnectionF import org.springframework.data.keyvalue.redis.connection.jredis.JredisConnectionFactory; import org.springframework.data.keyvalue.redis.connection.rjc.RjcConnectionFactory; import org.springframework.data.keyvalue.redis.core.RedisTemplate; +import org.springframework.data.keyvalue.redis.core.StringRedisTemplate; import org.springframework.data.keyvalue.redis.serializer.JacksonJsonRedisSerializer; import org.springframework.data.keyvalue.redis.serializer.OxmSerializer; import org.springframework.oxm.xstream.XStreamMarshaller; @@ -56,20 +57,26 @@ public abstract class CollectionTestParams { jedisConnFactory.afterPropertiesSet(); - RedisTemplate stringTemplate = new RedisTemplate(jedisConnFactory); - RedisTemplate personTemplate = new RedisTemplate(jedisConnFactory); + RedisTemplate stringTemplate = new StringRedisTemplate(jedisConnFactory); + RedisTemplate personTemplate = new RedisTemplate(); + personTemplate.setConnectionFactory(jedisConnFactory); + personTemplate.afterPropertiesSet(); RedisTemplate xstreamStringTemplate = new RedisTemplate(); xstreamStringTemplate.setConnectionFactory(jedisConnFactory); xstreamStringTemplate.setDefaultSerializer(serializer); xstreamStringTemplate.afterPropertiesSet(); - RedisTemplate xstreamPersonTemplate = new RedisTemplate(jedisConnFactory); + RedisTemplate xstreamPersonTemplate = new RedisTemplate(); + xstreamPersonTemplate.setConnectionFactory(jedisConnFactory); xstreamPersonTemplate.setValueSerializer(serializer); + xstreamPersonTemplate.afterPropertiesSet(); // json - RedisTemplate jsonPersonTemplate = new RedisTemplate(jedisConnFactory); + RedisTemplate jsonPersonTemplate = new RedisTemplate(); + jsonPersonTemplate.setConnectionFactory(jedisConnFactory); jsonPersonTemplate.setValueSerializer(jsonSerializer); + jsonPersonTemplate.afterPropertiesSet(); // jredis JredisConnectionFactory jredisConnFactory = new JredisConnectionFactory(); @@ -80,18 +87,25 @@ public abstract class CollectionTestParams { jredisConnFactory.afterPropertiesSet(); - RedisTemplate stringTemplateJR = new RedisTemplate(jredisConnFactory); - RedisTemplate personTemplateJR = new RedisTemplate(jredisConnFactory); + RedisTemplate stringTemplateJR = new StringRedisTemplate(jredisConnFactory); + RedisTemplate personTemplateJR = new RedisTemplate(); + personTemplateJR.setConnectionFactory(jredisConnFactory); + personTemplateJR.afterPropertiesSet(); RedisTemplate xstreamStringTemplateJR = new RedisTemplate(); xstreamStringTemplateJR.setConnectionFactory(jredisConnFactory); xstreamStringTemplateJR.setDefaultSerializer(serializer); xstreamStringTemplateJR.afterPropertiesSet(); - RedisTemplate xstreamPersonTemplateJR = new RedisTemplate(jredisConnFactory); + RedisTemplate xstreamPersonTemplateJR = new RedisTemplate(); xstreamPersonTemplateJR.setValueSerializer(serializer); - RedisTemplate jsonPersonTemplateJR = new RedisTemplate(jredisConnFactory); + xstreamPersonTemplateJR.setConnectionFactory(jredisConnFactory); + xstreamPersonTemplateJR.afterPropertiesSet(); + + RedisTemplate jsonPersonTemplateJR = new RedisTemplate(); jsonPersonTemplate.setValueSerializer(jsonSerializer); + jsonPersonTemplate.setConnectionFactory(jredisConnFactory); + jsonPersonTemplate.afterPropertiesSet(); // rjc @@ -101,8 +115,10 @@ public abstract class CollectionTestParams { rjcConnFactory.setHostName(SettingsUtils.getHost()); rjcConnFactory.afterPropertiesSet(); - RedisTemplate stringTemplateRJC = new RedisTemplate(rjcConnFactory); - RedisTemplate personTemplateRJC = new RedisTemplate(rjcConnFactory); + RedisTemplate stringTemplateRJC = new StringRedisTemplate(rjcConnFactory); + RedisTemplate personTemplateRJC = new RedisTemplate(); + personTemplateRJC.setConnectionFactory(rjcConnFactory); + personTemplateRJC.afterPropertiesSet(); RedisTemplate xstreamStringTemplateRJC = new RedisTemplate(); xstreamStringTemplateRJC.setConnectionFactory(rjcConnFactory); diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/RedisMapTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/RedisMapTests.java index 12efc9fc9..a2d9e449b 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/RedisMapTests.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/RedisMapTests.java @@ -25,6 +25,7 @@ import org.springframework.data.keyvalue.redis.connection.jedis.JedisConnectionF import org.springframework.data.keyvalue.redis.connection.jredis.JredisConnectionFactory; import org.springframework.data.keyvalue.redis.connection.rjc.RjcConnectionFactory; import org.springframework.data.keyvalue.redis.core.RedisTemplate; +import org.springframework.data.keyvalue.redis.core.StringRedisTemplate; import org.springframework.data.keyvalue.redis.serializer.JacksonJsonRedisSerializer; import org.springframework.data.keyvalue.redis.serializer.OxmSerializer; import org.springframework.oxm.xstream.XStreamMarshaller; @@ -71,7 +72,7 @@ public class RedisMapTests extends AbstractRedisMapTests { jedisConnFactory.afterPropertiesSet(); - RedisTemplate genericTemplate = new RedisTemplate(jedisConnFactory); + RedisTemplate genericTemplate = new StringRedisTemplate(jedisConnFactory); RedisTemplate xstreamGenericTemplate = new RedisTemplate(); xstreamGenericTemplate.setConnectionFactory(jedisConnFactory); @@ -92,7 +93,7 @@ public class RedisMapTests extends AbstractRedisMapTests { jredisConnFactory.setHostName(SettingsUtils.getHost()); jredisConnFactory.afterPropertiesSet(); - RedisTemplate genericTemplateJR = new RedisTemplate(jredisConnFactory); + RedisTemplate genericTemplateJR = new StringRedisTemplate(jredisConnFactory); RedisTemplate xGenericTemplateJR = new RedisTemplate(); xGenericTemplateJR.setConnectionFactory(jredisConnFactory); xGenericTemplateJR.setDefaultSerializer(serializer); @@ -114,7 +115,7 @@ public class RedisMapTests extends AbstractRedisMapTests { rjcConnFactory.setHostName(SettingsUtils.getHost()); rjcConnFactory.afterPropertiesSet(); - RedisTemplate genericTemplateRJC = new RedisTemplate(jredisConnFactory); + RedisTemplate genericTemplateRJC = new StringRedisTemplate(jredisConnFactory); RedisTemplate xGenericTemplateRJC = new RedisTemplate(); xGenericTemplateRJC.setConnectionFactory(rjcConnFactory); xGenericTemplateRJC.setDefaultSerializer(serializer); diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/RedisPropertiesTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/RedisPropertiesTests.java index 8053fde02..b8e058e05 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/RedisPropertiesTests.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/RedisPropertiesTests.java @@ -233,7 +233,7 @@ public class RedisPropertiesTests extends RedisMapTests { jedisConnFactory.afterPropertiesSet(); - RedisTemplate genericTemplate = new RedisTemplate(jedisConnFactory); + RedisTemplate genericTemplate = new StringRedisTemplate(jedisConnFactory); RedisTemplate xstreamGenericTemplate = new RedisTemplate(); xstreamGenericTemplate.setConnectionFactory(jedisConnFactory); @@ -254,7 +254,7 @@ public class RedisPropertiesTests extends RedisMapTests { jredisConnFactory.setHostName(SettingsUtils.getHost()); jredisConnFactory.afterPropertiesSet(); - RedisTemplate genericTemplateJR = new RedisTemplate(jredisConnFactory); + RedisTemplate genericTemplateJR = new StringRedisTemplate(jredisConnFactory); RedisTemplate xGenericTemplateJR = new RedisTemplate(); xGenericTemplateJR.setConnectionFactory(jredisConnFactory); xGenericTemplateJR.setDefaultSerializer(serializer); @@ -276,7 +276,7 @@ public class RedisPropertiesTests extends RedisMapTests { rjcConnFactory.setHostName(SettingsUtils.getHost()); rjcConnFactory.afterPropertiesSet(); - RedisTemplate genericTemplateRJC = new RedisTemplate(jredisConnFactory); + RedisTemplate genericTemplateRJC = new StringRedisTemplate(jredisConnFactory); RedisTemplate xGenericTemplateRJC = new RedisTemplate(); xGenericTemplateRJC.setConnectionFactory(rjcConnFactory); xGenericTemplateRJC.setDefaultSerializer(serializer);