diff --git a/src/main/asciidoc/reference/redis-repositories.adoc b/src/main/asciidoc/reference/redis-repositories.adoc index 43851cc5c..9957ed98d 100644 --- a/src/main/asciidoc/reference/redis-repositories.adoc +++ b/src/main/asciidoc/reference/redis-repositories.adoc @@ -678,9 +678,7 @@ class RedisOperationsProducer { @Produces RedisConnectionFactory redisConnectionFactory() { - JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); - jedisConnectionFactory.setHostName("localhost"); - jedisConnectionFactory.setPort(6379); + JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(new RedisStandaloneConfiguration()); jedisConnectionFactory.afterPropertiesSet(); return jedisConnectionFactory; diff --git a/src/main/java/org/springframework/data/redis/connection/RedisClusterConfiguration.java b/src/main/java/org/springframework/data/redis/connection/RedisClusterConfiguration.java index 35a006f80..8736d22a4 100644 --- a/src/main/java/org/springframework/data/redis/connection/RedisClusterConfiguration.java +++ b/src/main/java/org/springframework/data/redis/connection/RedisClusterConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 the original author or authors. + * Copyright 2015-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -53,7 +53,7 @@ public class RedisClusterConfiguration { * Creates new {@link RedisClusterConfiguration}. */ public RedisClusterConfiguration() { - this(new MapPropertySource("RedisClusterConfiguration", Collections. emptyMap())); + this(new MapPropertySource("RedisClusterConfiguration", Collections.emptyMap())); } /** @@ -64,12 +64,13 @@ public class RedisClusterConfiguration { * clusterHostAndPorts[0] = 127.0.0.1:23679 * clusterHostAndPorts[1] = 127.0.0.1:23680 ... * + * *
 	 *
 	 * @param clusterNodes must not be {@literal null}.
 	 */
 	public RedisClusterConfiguration(Collection clusterNodes) {
-		this(new MapPropertySource("RedisClusterConfiguration", asMap(clusterNodes, -1, -1, null)));
+		this(new MapPropertySource("RedisClusterConfiguration", asMap(clusterNodes, -1)));
 	}
 
 	/**
@@ -90,11 +91,11 @@ public class RedisClusterConfiguration {
 
 		notNull(propertySource, "PropertySource must not be null!");
 
-		this.clusterNodes = new LinkedHashSet();
+		this.clusterNodes = new LinkedHashSet<>();
 
 		if (propertySource.containsProperty(REDIS_CLUSTER_NODES_CONFIG_PROPERTY)) {
-			appendClusterNodes(commaDelimitedListToSet(propertySource.getProperty(REDIS_CLUSTER_NODES_CONFIG_PROPERTY)
-					.toString()));
+			appendClusterNodes(
+					commaDelimitedListToSet(propertySource.getProperty(REDIS_CLUSTER_NODES_CONFIG_PROPERTY).toString()));
 		}
 		if (propertySource.containsProperty(REDIS_CLUSTER_MAX_REDIRECTS_CONFIG_PROPERTY)) {
 			this.maxRedirects = NumberUtils.parseNumber(
@@ -139,7 +140,7 @@ public class RedisClusterConfiguration {
 	}
 
 	/**
-	 * @return
+	 * @return this.
 	 */
 	public RedisClusterConfiguration clusterNode(RedisNode node) {
 
@@ -148,14 +149,14 @@ public class RedisClusterConfiguration {
 	}
 
 	/**
-	 * @return
+	 * @return max number of redirects to follow or {@literal null} if not set.
 	 */
 	public Integer getMaxRedirects() {
 		return maxRedirects != null && maxRedirects > Integer.MIN_VALUE ? maxRedirects : null;
 	}
 
 	/**
-	 * @param maxRedirects
+	 * @param maxRedirects the max number of redirects to follow.
 	 */
 	public void setMaxRedirects(int maxRedirects) {
 
@@ -164,9 +165,9 @@ public class RedisClusterConfiguration {
 	}
 
 	/**
-	 * @param host
-	 * @param port
-	 * @return
+	 * @param host Redis cluster node host name or ip address.
+	 * @param port Redis cluster node port.
+	 * @return this.
 	 */
 	public RedisClusterConfiguration clusterNode(String host, Integer port) {
 		return clusterNode(new RedisNode(host, port));
@@ -180,7 +181,9 @@ public class RedisClusterConfiguration {
 	}
 
 	/**
-	 * @return
+	 * Get the {@link RedisPassword} defined.
+	 *
+	 * @return never {@literal null}.
 	 * @since 2.0
 	 */
 	public RedisPassword getPassword() {
@@ -204,26 +207,24 @@ public class RedisClusterConfiguration {
 
 		notNull(args, "HostAndPort need to be seperated by  ':'.");
 		isTrue(args.length == 2, "Host and Port String needs to specified as host:port");
-		return new RedisNode(args[0], Integer.valueOf(args[1]).intValue());
+		return new RedisNode(args[0], Integer.valueOf(args[1]));
 	}
 
 	/**
 	 * @param clusterHostAndPorts must not be {@literal null} or empty.
-	 * @param timeout
-	 * @param redirects
+	 * @param redirects the max number of redirects to follow.
 	 * @param password can be {@literal null} or empty.
-	 * @return
+	 * @return cluster config map with properties.
 	 */
-	private static Map asMap(Collection clusterHostAndPorts, long timeout, int redirects,
-			String password) {
+	private static Map asMap(Collection clusterHostAndPorts, int redirects) {
 
 		notNull(clusterHostAndPorts, "ClusterHostAndPorts must not be null!");
 
-		Map map = new HashMap();
+		Map map = new HashMap<>();
 		map.put(REDIS_CLUSTER_NODES_CONFIG_PROPERTY, StringUtils.collectionToCommaDelimitedString(clusterHostAndPorts));
 
 		if (redirects >= 0) {
-			map.put(REDIS_CLUSTER_MAX_REDIRECTS_CONFIG_PROPERTY, Integer.valueOf(redirects));
+			map.put(REDIS_CLUSTER_MAX_REDIRECTS_CONFIG_PROPERTY, redirects);
 		}
 
 		return map;
diff --git a/src/main/java/org/springframework/data/redis/connection/RedisPassword.java b/src/main/java/org/springframework/data/redis/connection/RedisPassword.java
index be2eddfa4..ded000a94 100644
--- a/src/main/java/org/springframework/data/redis/connection/RedisPassword.java
+++ b/src/main/java/org/springframework/data/redis/connection/RedisPassword.java
@@ -25,6 +25,8 @@ import java.util.Optional;
 import java.util.function.Function;
 
 import org.springframework.util.Assert;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
 
 /**
  * Value object which may or may not contain a Redis password.
@@ -34,13 +36,14 @@ import org.springframework.util.Assert;
  * The password is stored as character array.
  *
  * @author Mark Paluch
+ * @author Christoph Strobl
  * @since 2.0
  */
 @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
 @EqualsAndHashCode
 public class RedisPassword {
 
-	private static final RedisPassword NONE = new RedisPassword(new char[0]);
+	private static final RedisPassword NONE = new RedisPassword(new char[] {});
 
 	private final char[] thePassword;
 
@@ -53,7 +56,7 @@ public class RedisPassword {
 	public static RedisPassword of(String passwordAsString) {
 
 		return Optional.ofNullable(passwordAsString) //
-				.filter(it -> it.length() != 0) //
+				.filter(StringUtils::hasText) //
 				.map(it -> new RedisPassword(it.toCharArray())) //
 				.orElseGet(RedisPassword::none);
 	}
@@ -61,13 +64,13 @@ public class RedisPassword {
 	/**
 	 * Create a {@link RedisPassword} from a {@code char} array.
 	 *
-	 * @param passwordAsChars the password as string.
+	 * @param passwordAsChars the password as char array.
 	 * @return the {@link RedisPassword} for {@code passwordAsChars}.
 	 */
 	public static RedisPassword of(char[] passwordAsChars) {
 
 		return Optional.ofNullable(passwordAsChars) //
-				.filter(it -> it.length != 0) //
+				.filter(it -> !ObjectUtils.isEmpty(passwordAsChars)) //
 				.map(it -> new RedisPassword(Arrays.copyOf(it, it.length))) //
 				.orElseGet(RedisPassword::none);
 	}
@@ -87,7 +90,7 @@ public class RedisPassword {
 	 * @return {@code true} if there is a password present, otherwise {@code false}
 	 */
 	public boolean isPresent() {
-		return thePassword.length != 0;
+		return !ObjectUtils.isEmpty(thePassword);
 	}
 
 	/**
@@ -117,11 +120,7 @@ public class RedisPassword {
 
 		Assert.notNull(mapper, "Mapper function must not be null!");
 
-		if (isPresent()) {
-			return Optional.ofNullable(mapper.apply(thePassword));
-		}
-
-		return Optional.empty();
+		return toOptional().map(mapper);
 	}
 
 	/**
@@ -140,7 +139,8 @@ public class RedisPassword {
 		return Optional.empty();
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
 	@Override
diff --git a/src/main/java/org/springframework/data/redis/connection/RedisSentinelConfiguration.java b/src/main/java/org/springframework/data/redis/connection/RedisSentinelConfiguration.java
index 39c4d145d..c792174a3 100644
--- a/src/main/java/org/springframework/data/redis/connection/RedisSentinelConfiguration.java
+++ b/src/main/java/org/springframework/data/redis/connection/RedisSentinelConfiguration.java
@@ -54,7 +54,7 @@ public class RedisSentinelConfiguration {
 	 * Creates new {@link RedisSentinelConfiguration}.
 	 */
 	public RedisSentinelConfiguration() {
-		this(new MapPropertySource("RedisSentinelConfiguration", Collections. emptyMap()));
+		this(new MapPropertySource("RedisSentinelConfiguration", Collections.emptyMap()));
 	}
 
 	/**
@@ -89,7 +89,7 @@ public class RedisSentinelConfiguration {
 
 		notNull(propertySource, "PropertySource must not be null!");
 
-		this.sentinels = new LinkedHashSet();
+		this.sentinels = new LinkedHashSet<>();
 
 		if (propertySource.containsProperty(REDIS_SENTINEL_MASTER_CONFIG_PROPERTY)) {
 			this.setMaster(propertySource.getProperty(REDIS_SENTINEL_MASTER_CONFIG_PROPERTY).toString());
@@ -145,13 +145,7 @@ public class RedisSentinelConfiguration {
 	public void setMaster(final String name) {
 
 		notNull(name, "Name of sentinel master must not be null.");
-		setMaster(new NamedNode() {
-
-			@Override
-			public String getName() {
-				return name;
-			}
-		});
+		setMaster(() -> name);
 	}
 
 	/**
@@ -168,7 +162,7 @@ public class RedisSentinelConfiguration {
 	/**
 	 * Get the {@literal Sentinel} master node.
 	 *
-	 * @return
+	 * @return get the master node.
 	 */
 	public NamedNode getMaster() {
 		return master;
@@ -176,8 +170,8 @@ public class RedisSentinelConfiguration {
 
 	/**
 	 * @see #setMaster(String)
-	 * @param master
-	 * @return
+	 * @param master The master node name.
+	 * @return this.
 	 */
 	public RedisSentinelConfiguration master(String master) {
 		this.setMaster(master);
@@ -186,8 +180,8 @@ public class RedisSentinelConfiguration {
 
 	/**
 	 * @see #setMaster(NamedNode)
-	 * @param master
-	 * @return
+	 * @param master the master node
+	 * @return this.
 	 */
 	public RedisSentinelConfiguration master(NamedNode master) {
 		this.setMaster(master);
@@ -196,8 +190,8 @@ public class RedisSentinelConfiguration {
 
 	/**
 	 * @see #addSentinel(RedisNode)
-	 * @param sentinel
-	 * @return
+	 * @param sentinel the node to add as sentinel.
+	 * @return this.
 	 */
 	public RedisSentinelConfiguration sentinel(RedisNode sentinel) {
 		this.addSentinel(sentinel);
@@ -206,9 +200,9 @@ public class RedisSentinelConfiguration {
 
 	/**
 	 * @see #sentinel(RedisNode)
-	 * @param host
-	 * @param port
-	 * @return
+	 * @param host redis sentinel node host name or ip.
+	 * @param port redis sentinel port.
+	 * @return this.
 	 */
 	public RedisSentinelConfiguration sentinel(String host, Integer port) {
 		return sentinel(new RedisNode(host, port));
@@ -222,7 +216,7 @@ public class RedisSentinelConfiguration {
 	}
 
 	/**
-	 * @return
+	 * @return the initial db index.
 	 * @since 2.0
 	 */
 	public int getDatabase() {
@@ -237,13 +231,13 @@ public class RedisSentinelConfiguration {
 	 */
 	public void setDatabase(int index) {
 
-		Assert.isTrue(index >= 0, "invalid DB index (a positive index required)");
+		Assert.isTrue(index >= 0, () -> String.format("Invalid DB index '%s' (a positive index required)", index));
 
 		this.database = index;
 	}
 
 	/**
-	 * @return
+	 * @return never {@literal null}.
 	 * @since 2.0
 	 */
 	public RedisPassword getPassword() {
@@ -273,14 +267,14 @@ public class RedisSentinelConfiguration {
 	/**
 	 * @param master must not be {@literal null} or empty.
 	 * @param sentinelHostAndPorts must not be {@literal null}.
-	 * @return
+	 * @return configuration map.
 	 */
 	private static Map asMap(String master, Set sentinelHostAndPorts) {
 
 		hasText(master, "Master address must not be null or empty!");
 		notNull(sentinelHostAndPorts, "SentinelHostAndPorts must not be null!");
 
-		Map map = new HashMap();
+		Map map = new HashMap<>();
 		map.put(REDIS_SENTINEL_MASTER_CONFIG_PROPERTY, master);
 		map.put(REDIS_SENTINEL_NODES_CONFIG_PROPERTY, StringUtils.collectionToCommaDelimitedString(sentinelHostAndPorts));
 
diff --git a/src/main/java/org/springframework/data/redis/connection/RedisStandaloneConfiguration.java b/src/main/java/org/springframework/data/redis/connection/RedisStandaloneConfiguration.java
index 056040fb5..fcdd1feb7 100644
--- a/src/main/java/org/springframework/data/redis/connection/RedisStandaloneConfiguration.java
+++ b/src/main/java/org/springframework/data/redis/connection/RedisStandaloneConfiguration.java
@@ -19,15 +19,16 @@ import org.springframework.util.Assert;
 
 /**
  * Configuration class used for setting up {@link RedisConnection} via {@link RedisConnectionFactory} using connecting
- * to Redis.
+ * to a single node Redis installation.
  *
  * @author Mark Paluch
+ * @author Christoph Strobl
  * @since 2.0
  */
 public class RedisStandaloneConfiguration {
 
-	public static final String DEFAULT_HOST = "localhost";
-	public static final int DEFAULT_PORT = 6379;
+	private static final String DEFAULT_HOST = "localhost";
+	private static final int DEFAULT_PORT = 6379;
 
 	private String hostName = DEFAULT_HOST;
 	private int port = DEFAULT_PORT;
@@ -65,35 +66,35 @@ public class RedisStandaloneConfiguration {
 	}
 
 	/**
-	 * @return
+	 * @return the hostname or ip of the Redis node.
 	 */
 	public String getHostName() {
 		return hostName;
 	}
 
 	/**
-	 * @return
+	 * @return the port or the Redis node.
 	 */
 	public int getPort() {
 		return port;
 	}
 
 	/**
-	 * @param hostName
+	 * @param hostName the hostname or ip of the Redis node.
 	 */
 	public void setHostName(String hostName) {
 		this.hostName = hostName;
 	}
 
 	/**
-	 * @param port
+	 * @param port the Redis node port to connect to.
 	 */
 	public void setPort(int port) {
 		this.port = port;
 	}
 
 	/**
-	 * @return
+	 * @return the db index.
 	 */
 	public int getDatabase() {
 		return database;
@@ -106,13 +107,13 @@ public class RedisStandaloneConfiguration {
 	 */
 	public void setDatabase(int index) {
 
-		Assert.isTrue(index >= 0, "invalid DB index (a positive index required)");
+		Assert.isTrue(index >= 0, () -> String.format("Invalid DB index '%s' (a positive index required)", index));
 
 		this.database = index;
 	}
 
 	/**
-	 * @return
+	 * @return never {@literal null}.
 	 */
 	public RedisPassword getPassword() {
 		return password;
diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/DefaultJedisClientConfiguration.java b/src/main/java/org/springframework/data/redis/connection/jedis/DefaultJedisClientConfiguration.java
index 529f97e4f..0e9426763 100644
--- a/src/main/java/org/springframework/data/redis/connection/jedis/DefaultJedisClientConfiguration.java
+++ b/src/main/java/org/springframework/data/redis/connection/jedis/DefaultJedisClientConfiguration.java
@@ -61,7 +61,7 @@ class DefaultJedisClientConfiguration implements JedisClientConfiguration {
 	 * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#useSsl()
 	 */
 	@Override
-	public boolean useSsl() {
+	public boolean isUseSsl() {
 		return useSsl;
 	}
 
@@ -93,7 +93,7 @@ class DefaultJedisClientConfiguration implements JedisClientConfiguration {
 	 * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#usePooling()
 	 */
 	@Override
-	public boolean usePooling() {
+	public boolean isUsePooling() {
 		return usePooling;
 	}
 
diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClientConfiguration.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClientConfiguration.java
index 8beec65cf..b669e1dd8 100644
--- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClientConfiguration.java
+++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClientConfiguration.java
@@ -46,6 +46,7 @@ import org.springframework.util.Assert;
  * 
  *
  * @author Mark Paluch
+ * @author Christoph Strobl
  * @since 2.0
  * @see redis.clients.jedis.Jedis
  * @see org.springframework.data.redis.connection.RedisStandaloneConfiguration
@@ -57,7 +58,7 @@ public interface JedisClientConfiguration {
 	/**
 	 * @return {@literal true} to use SSL, {@literal false} to use unencrypted connections.
 	 */
-	boolean useSsl();
+	boolean isUseSsl();
 
 	/**
 	 * @return the optional {@link SSLSocketFactory}.
@@ -77,7 +78,7 @@ public interface JedisClientConfiguration {
 	/**
 	 * @return {@literal true} to use connection-pooling.
 	 */
-	boolean usePooling();
+	boolean isUsePooling();
 
 	/**
 	 * @return the optional {@link GenericObjectPoolConfig}.
@@ -112,11 +113,23 @@ public interface JedisClientConfiguration {
 	}
 
 	/**
-	 * Creates an empty {@link JedisClientConfiguration}.
+	 * Creates a default {@link JedisClientConfiguration}.
+	 * 
+ *
SSL enabled
+ *
no
+ *
Pooling enabled
+ *
no
+ *
Client Name
+ *
[not set]
+ *
Read Timeout
+ *
2000 msec
+ *
Connect Timeout
+ *
2000 msec
+ *
* - * @return an empty {@link JedisClientConfiguration}. + * @return a {@link JedisClientConfiguration} with defaults. */ - static JedisClientConfiguration create() { + static JedisClientConfiguration defaultConfiguration() { return builder().build(); } @@ -132,13 +145,6 @@ public interface JedisClientConfiguration { */ JedisSslClientConfigurationBuilder useSsl(); - /** - * Use plaintext connections instead of SSL. - * - * @return {@link JedisSslClientConfigurationBuilder}. - */ - JedisClientConfigurationBuilder usePlaintext(); - /** * Enable connection-pooling. * @@ -146,18 +152,12 @@ public interface JedisClientConfiguration { */ JedisPoolingClientConfigurationBuilder usePooling(); - /** - * Disable connection-pooling. - * - * @return {@link JedisClientConfigurationBuilder}. - */ - JedisClientConfigurationBuilder useUnpooledConnections(); - /** * Configure a {@code clientName} to be set with {@code CLIENT SETNAME}. * * @param clientName must not be {@literal null}. * @return {@literal this} builder. + * @throws IllegalArgumentException if clientName is {@literal null}. */ JedisClientConfigurationBuilder clientName(String clientName); @@ -166,6 +166,7 @@ public interface JedisClientConfiguration { * * @param readTimeout must not be {@literal null}. * @return {@literal this} builder. + * @throws IllegalArgumentException if readTimeout is {@literal null}. */ JedisClientConfigurationBuilder readTimeout(Duration readTimeout); @@ -174,6 +175,7 @@ public interface JedisClientConfiguration { * * @param connectTimeout must not be {@literal null}. * @return {@literal this} builder. + * @throws IllegalArgumentException if connectTimeout is {@literal null}. */ JedisClientConfigurationBuilder connectTimeout(Duration connectTimeout); @@ -193,6 +195,7 @@ public interface JedisClientConfiguration { /** * @param poolConfig must not be {@literal null}. * @return {@literal this} builder. + * @throws IllegalArgumentException if poolConfig is {@literal null}. */ JedisPoolingClientConfigurationBuilder poolConfig(GenericObjectPoolConfig poolConfig); @@ -219,18 +222,21 @@ public interface JedisClientConfiguration { /** * @param sslSocketFactory must not be {@literal null}. * @return {@literal this} builder. + * @throws IllegalArgumentException if sslSocketFactory is {@literal null}. */ JedisSslClientConfigurationBuilder sslSocketFactory(SSLSocketFactory sslSocketFactory); /** * @param sslParameters must not be {@literal null}. * @return {@literal this} builder. + * @throws IllegalArgumentException if sslParameters is {@literal null}. */ JedisSslClientConfigurationBuilder sslParameters(SSLParameters sslParameters); /** * @param hostnameVerifier must not be {@literal null}. * @return {@literal this} builder. + * @throws IllegalArgumentException if hostnameVerifier is {@literal null}. */ JedisSslClientConfigurationBuilder hostnameVerifier(HostnameVerifier hostnameVerifier); @@ -268,31 +274,23 @@ public interface JedisClientConfiguration { private DefaultJedisClientConfigurationBuilder() {} - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#useSsl() */ @Override - public DefaultJedisClientConfigurationBuilder useSsl() { + public JedisSslClientConfigurationBuilder useSsl() { this.useSsl = true; return this; } - /* (non-Javadoc) - * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#usePlaintext() - */ - @Override - public JedisClientConfigurationBuilder usePlaintext() { - - this.useSsl = false; - return this; - } - - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisSslClientConfigurationBuilder#sslSocketFactory(javax.net.ssl.SSLSocketFactory) */ @Override - public DefaultJedisClientConfigurationBuilder sslSocketFactory(SSLSocketFactory sslSocketFactory) { + public JedisSslClientConfigurationBuilder sslSocketFactory(SSLSocketFactory sslSocketFactory) { Assert.notNull(sslSocketFactory, "SSLSocketFactory must not be null!"); @@ -300,11 +298,12 @@ public interface JedisClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisSslClientConfigurationBuilder#sslParameters(javax.net.ssl.SSLParameters) */ @Override - public DefaultJedisClientConfigurationBuilder sslParameters(SSLParameters sslParameters) { + public JedisSslClientConfigurationBuilder sslParameters(SSLParameters sslParameters) { Assert.notNull(sslParameters, "SSLParameters must not be null!"); @@ -312,11 +311,12 @@ public interface JedisClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisSslClientConfigurationBuilder#hostnameVerifier(javax.net.ssl.HostnameVerifier) */ @Override - public DefaultJedisClientConfigurationBuilder hostnameVerifier(HostnameVerifier hostnameVerifier) { + public JedisSslClientConfigurationBuilder hostnameVerifier(HostnameVerifier hostnameVerifier) { Assert.notNull(hostnameVerifier, "HostnameVerifier must not be null!"); @@ -324,31 +324,23 @@ public interface JedisClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#usePooling() */ @Override - public DefaultJedisClientConfigurationBuilder usePooling() { + public JedisPoolingClientConfigurationBuilder usePooling() { this.usePooling = true; return this; } - /* (non-Javadoc) - * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#useUnpooledConnections() - */ - @Override - public JedisClientConfigurationBuilder useUnpooledConnections() { - - this.usePooling = false; - return this; - } - - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisPoolingClientConfigurationBuilder#poolConfig(org.apache.commons.pool2.impl.GenericObjectPoolConfig) */ @Override - public DefaultJedisClientConfigurationBuilder poolConfig(GenericObjectPoolConfig poolConfig) { + public JedisPoolingClientConfigurationBuilder poolConfig(GenericObjectPoolConfig poolConfig) { Assert.notNull(poolConfig, "GenericObjectPoolConfig must not be null!"); @@ -356,7 +348,8 @@ public interface JedisClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisPoolingClientConfigurationBuilder#and() */ @Override @@ -364,7 +357,8 @@ public interface JedisClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#clientName(java.lang.String) */ @Override @@ -376,7 +370,8 @@ public interface JedisClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#readTimeout(java.time.Duration) */ @Override @@ -388,7 +383,8 @@ public interface JedisClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#connectTimeout(java.time.Duration) */ @Override @@ -400,7 +396,8 @@ public interface JedisClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#build() */ @Override diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java index b1c8150d3..1a947eb64 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java @@ -26,7 +26,6 @@ import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.Protocol; import redis.clients.util.Pool; -import java.lang.reflect.Method; import java.time.Duration; import java.util.Collection; import java.util.Collections; @@ -50,11 +49,19 @@ import org.springframework.dao.InvalidDataAccessResourceUsageException; import org.springframework.data.redis.ExceptionTranslationStrategy; import org.springframework.data.redis.PassThroughExceptionTranslationStrategy; import org.springframework.data.redis.RedisConnectionFailureException; -import org.springframework.data.redis.connection.*; +import org.springframework.data.redis.connection.ClusterCommandExecutor; +import org.springframework.data.redis.connection.RedisClusterConfiguration; +import org.springframework.data.redis.connection.RedisClusterConnection; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisNode; +import org.springframework.data.redis.connection.RedisPassword; +import org.springframework.data.redis.connection.RedisSentinelConfiguration; +import org.springframework.data.redis.connection.RedisSentinelConnection; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.CollectionUtils; -import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; /** @@ -82,19 +89,6 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, private static final ExceptionTranslationStrategy EXCEPTION_TRANSLATION = new PassThroughExceptionTranslationStrategy( JedisConverters.exceptionConverter()); - private static final Method SET_TIMEOUT_METHOD; - - static { - - // We need to configure Jedis socket timeout via reflection since the method-name was changed between releases. - Method setTimeoutMethodCandidate = ReflectionUtils.findMethod(JedisShardInfo.class, "setTimeout", int.class); - if (setTimeoutMethodCandidate == null) { - // Jedis V 2.7.x changed the setTimeout method to setSoTimeout - setTimeoutMethodCandidate = ReflectionUtils.findMethod(JedisShardInfo.class, "setSoTimeout", int.class); - } - SET_TIMEOUT_METHOD = setTimeoutMethodCandidate; - } - private final JedisClientConfiguration clientConfiguration; private JedisShardInfo shardInfo; private boolean providedShardInfo = false; @@ -169,7 +163,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, * Constructs a new {@link JedisConnectionFactory} instance using the given {@link JedisPoolConfig} applied to * {@link JedisSentinelPool}. * - * @param sentinelConfig + * @param sentinelConfig the sentinel configuration to use. * @param poolConfig pool configuration. Defaulted to new instance if {@literal null}. * @since 1.4 */ @@ -314,7 +308,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, * Post process a newly retrieved connection. Useful for decorating or executing initialization commands on a new * connection. This implementation simply returns the connection. * - * @param connection + * @param connection the jedis connection. * @return processed connection */ protected JedisConnection postProcessConnection(JedisConnection connection) { @@ -340,7 +334,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, int readTimeout = getReadTimeout(); if (readTimeout > 0) { - setTimeoutOn(shardInfo, readTimeout); + shardInfo.setSoTimeout(readTimeout); } getMutableConfiguration().setShardInfo(shardInfo); @@ -366,8 +360,8 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, /** * Creates {@link JedisSentinelPool}. * - * @param config - * @return + * @param config the actual {@link RedisSentinelConfiguration}. Never {@literal null}. + * @return the {@link Pool} to use. Never {@literal null}. * @since 1.4 */ protected Pool createRedisSentinelPool(RedisSentinelConfiguration config) { @@ -380,7 +374,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, /** * Creates {@link JedisPool}. * - * @return + * @return the {@link Pool} to use. Never {@literal null}. * @since 1.4 */ protected Pool createRedisPool() { @@ -406,7 +400,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, * * @param clusterConfig must not be {@literal null}. * @param poolConfig can be {@literal null}. - * @return + * @return the actual {@link JedisCluster}. * @since 1.7 */ protected JedisCluster createCluster(RedisClusterConfiguration clusterConfig, GenericObjectPoolConfig poolConfig) { @@ -526,7 +520,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, * @since 1.8 */ public boolean isUseSsl() { - return clientConfiguration.useSsl(); + return clientConfiguration.isUseSsl(); } /** @@ -663,7 +657,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, * @return the use of connection pooling. */ public boolean getUsePool() { - return clientConfiguration.usePooling(); + return clientConfiguration.isUsePooling(); } /** @@ -876,10 +870,6 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, clientConfiguration.getClientName().ifPresent(jedis::clientSetname); } - private void setTimeoutOn(JedisShardInfo shardInfo, int timeout) { - ReflectionUtils.invokeMethod(SET_TIMEOUT_METHOD, shardInfo, timeout); - } - private int getReadTimeout() { return Math.toIntExact(clientConfiguration.getReadTimeout().toMillis()); } @@ -897,6 +887,11 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, return (MutableJedisClientConfiguration) clientConfiguration; } + /** + * Mutable implementation of {@link JedisClientConfiguration}. + * + * @author Mark Paluch + */ static class MutableJedisClientConfiguration implements JedisClientConfiguration { private boolean useSsl; @@ -912,26 +907,22 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, public static JedisClientConfiguration create(JedisShardInfo shardInfo) { MutableJedisClientConfiguration configuration = new MutableJedisClientConfiguration(); - configuration.setShardInfo(shardInfo); - return configuration; } public static JedisClientConfiguration create(GenericObjectPoolConfig jedisPoolConfig) { MutableJedisClientConfiguration configuration = new MutableJedisClientConfiguration(); - configuration.setPoolConfig(jedisPoolConfig); - return configuration; } /* (non-Javadoc) - * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#useSsl() + * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#isUseSsl() */ @Override - public boolean useSsl() { + public boolean isUseSsl() { return useSsl; } @@ -939,7 +930,8 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, this.useSsl = useSsl; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#getSslSocketFactory() */ @Override @@ -951,7 +943,8 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, this.sslSocketFactory = sslSocketFactory; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#getSslParameters() */ @Override @@ -963,7 +956,8 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, this.sslParameters = sslParameters; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#getHostnameVerifier() */ @Override @@ -975,11 +969,12 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, this.hostnameVerifier = hostnameVerifier; } - /* (non-Javadoc) - * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#usePooling() + /* + * (non-Javadoc) + * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#isUsePooling() */ @Override - public boolean usePooling() { + public boolean isUsePooling() { return usePooling; } @@ -987,7 +982,8 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, this.usePooling = usePooling; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#getPoolConfig() */ @Override @@ -999,7 +995,8 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, this.poolConfig = poolConfig; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#getClientName() */ @Override @@ -1011,7 +1008,8 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, this.clientName = clientName; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#getReadTimeout() */ @Override @@ -1023,7 +1021,8 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, this.readTimeout = readTimeout; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration#getConnectTimeout() */ @Override diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettuceClientConfiguration.java b/src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettuceClientConfiguration.java index 993c4d813..80abb5d06 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettuceClientConfiguration.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettuceClientConfiguration.java @@ -53,7 +53,7 @@ class DefaultLettuceClientConfiguration implements LettuceClientConfiguration { * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration#useSsl() */ @Override - public boolean useSsl() { + public boolean isUseSsl() { return useSsl; } @@ -93,7 +93,7 @@ class DefaultLettuceClientConfiguration implements LettuceClientConfiguration { * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration#getTimeout() */ @Override - public Duration getTimeout() { + public Duration getCommandTimeout() { return timeout; } diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfiguration.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfiguration.java index c0533cea3..a91ea7d0c 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfiguration.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfiguration.java @@ -41,6 +41,7 @@ import org.springframework.util.Assert; * * * @author Mark Paluch + * @author Christoph Strobl * @since 2.0 * @see org.springframework.data.redis.connection.RedisStandaloneConfiguration * @see org.springframework.data.redis.connection.RedisSentinelConfiguration @@ -51,10 +52,10 @@ public interface LettuceClientConfiguration { /** * @return {@literal true} to use SSL, {@literal false} to use unencrypted connections. */ - boolean useSsl(); + boolean isUseSsl(); /** - * @return {@literal true} to verify peers when using {@link #useSsl() SSL}. + * @return {@literal true} to verify peers when using {@link #isUseSsl() SSL}. */ boolean isVerifyPeer(); @@ -76,7 +77,7 @@ public interface LettuceClientConfiguration { /** * @return the timeout. */ - Duration getTimeout(); + Duration getCommandTimeout(); /** * @return the shutdown timeout used to close the client. @@ -95,11 +96,27 @@ public interface LettuceClientConfiguration { } /** - * Creates an empty {@link LettuceClientConfiguration}. + * Creates a default {@link LettuceClientConfiguration} with: + *
+ *
SSL
+ *
no
+ *
Peer Verification
+ *
yes
+ *
Start TLS
+ *
no
+ *
Client Options
+ *
none
+ *
Client Resources
+ *
none
+ *
Connect Timeout
+ *
60 Seconds
+ *
Shutdown Timeout
+ *
2 Seconds
+ *
* - * @return an empty {@link LettuceClientConfiguration}. + * @return a {@link LettuceClientConfiguration} with defaults. */ - static LettuceClientConfiguration create() { + static LettuceClientConfiguration defaultConfiguration() { return builder().build(); } @@ -115,18 +132,12 @@ public interface LettuceClientConfiguration { */ LettuceSslClientConfigurationBuilder useSsl(); - /** - * Use plaintext connections instead of SSL. - * - * @return {@link LettuceClientConfigurationBuilder}. - */ - LettuceClientConfigurationBuilder usePlaintext(); - /** * Configure {@link ClientResources}. * * @param clientResources must not be {@literal null}. * @return {@literal this} builder. + * @throws IllegalArgumentException if clientResources is {@literal null}. */ LettuceClientConfigurationBuilder clientResources(ClientResources clientResources); @@ -135,24 +146,25 @@ public interface LettuceClientConfiguration { * * @param clientOptions must not be {@literal null}. * @return {@literal this} builder. - * @see ClientOptions - * @see io.lettuce.core.cluster.ClusterClientOptions + * @throws IllegalArgumentException if clientOptions is {@literal null}. */ LettuceClientConfigurationBuilder clientOptions(ClientOptions clientOptions); /** - * Configure a timeout. + * Configure a command timeout. * * @param timeout must not be {@literal null}. * @return {@literal this} builder. + * @throws IllegalArgumentException if timeout is {@literal null}. */ - LettuceClientConfigurationBuilder timeout(Duration timeout); + LettuceClientConfigurationBuilder commandTimeout(Duration timeout); /** * Configure a shutdown timeout. * * @param shutdownTimeout must not be {@literal null}. * @return {@literal this} builder. + * @throws IllegalArgumentException if shutdownTimeout is {@literal null}. */ LettuceClientConfigurationBuilder shutdownTimeout(Duration shutdownTimeout); @@ -170,19 +182,11 @@ public interface LettuceClientConfiguration { interface LettuceSslClientConfigurationBuilder { /** - * Enable peer verification. + * Disable peer verification. * * @return {@literal this} builder. */ - LettuceSslClientConfigurationBuilder verifyPeer(); - - /** - * Enable/disable peer verification. - * - * @param verifyPeer {@literal true} to enable peer verification, {@literal false} to skip peer verification. - * @return {@literal this} builder. - */ - LettuceSslClientConfigurationBuilder verifyPeer(boolean verifyPeer); + LettuceSslClientConfigurationBuilder disablePeerVerification(); /** * Enable Start TLS to send the first bytes unencrypted. @@ -223,7 +227,8 @@ public interface LettuceClientConfiguration { private DefaultLettuceClientConfigurationBuilder() {} - /* (non-Javadoc) + /*d + * (non-Javadoc) * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder#useSsl() */ @Override @@ -233,35 +238,19 @@ public interface LettuceClientConfiguration { return this; } - /* (non-Javadoc) - * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder#usePlaintext() + /* + *(non-Javadoc) + * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceSslClientConfigurationBuilder#disablePeerVerification() */ @Override - public LettuceClientConfigurationBuilder usePlaintext() { + public LettuceSslClientConfigurationBuilder disablePeerVerification() { - this.useSsl = false; + this.verifyPeer = false; return this; } - /* (non-Javadoc) - * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceSslClientConfigurationBuilder#verifyPeer() - */ - @Override - public LettuceSslClientConfigurationBuilder verifyPeer() { - return verifyPeer(true); - } - - /* (non-Javadoc) - * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceSslClientConfigurationBuilder#verifyPeer(boolean) - */ - @Override - public LettuceSslClientConfigurationBuilder verifyPeer(boolean verifyPeer) { - - this.verifyPeer = verifyPeer; - return this; - } - - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceSslClientConfigurationBuilder#startTls() */ @Override @@ -271,7 +260,8 @@ public interface LettuceClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceSslClientConfigurationBuilder#and() */ @Override @@ -279,7 +269,8 @@ public interface LettuceClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder#clientResources(io.lettuce.core.resource.ClientResources) */ @Override @@ -291,7 +282,8 @@ public interface LettuceClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder#clientOptions(io.lettuce.core.ClientOptions) */ @Override @@ -303,11 +295,12 @@ public interface LettuceClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder#timeout(java.time.Duration) */ @Override - public LettuceClientConfigurationBuilder timeout(Duration timeout) { + public LettuceClientConfigurationBuilder commandTimeout(Duration timeout) { Assert.notNull(timeout, "Duration must not be null!"); @@ -315,7 +308,8 @@ public interface LettuceClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder#shutdownTimeout(java.time.Duration) */ @Override @@ -327,7 +321,8 @@ public interface LettuceClientConfiguration { return this; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder#build() */ @Override diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java index bb8c3cb2d..4e0e78300 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java @@ -41,7 +41,18 @@ import org.springframework.dao.InvalidDataAccessResourceUsageException; import org.springframework.data.redis.ExceptionTranslationStrategy; import org.springframework.data.redis.PassThroughExceptionTranslationStrategy; import org.springframework.data.redis.RedisConnectionFailureException; -import org.springframework.data.redis.connection.*; +import org.springframework.data.redis.connection.ClusterCommandExecutor; +import org.springframework.data.redis.connection.Pool; +import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; +import org.springframework.data.redis.connection.RedisClusterConfiguration; +import org.springframework.data.redis.connection.RedisClusterConnection; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisNode; +import org.springframework.data.redis.connection.RedisPassword; +import org.springframework.data.redis.connection.RedisSentinelConfiguration; +import org.springframework.data.redis.connection.RedisSentinelConnection; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -75,8 +86,6 @@ import org.springframework.util.ClassUtils; public class LettuceConnectionFactory implements InitializingBean, DisposableBean, RedisConnectionFactory, ReactiveRedisConnectionFactory { - public static final String PING_REPLY = "PONG"; - private static final ExceptionTranslationStrategy EXCEPTION_TRANSLATION = new PassThroughExceptionTranslationStrategy( LettuceConverters.exceptionConverter()); @@ -409,7 +418,7 @@ public class LettuceConnectionFactory * @return use of SSL. */ public boolean isUseSsl() { - return clientConfiguration.useSsl(); + return clientConfiguration.isUseSsl(); } /** @@ -800,10 +809,10 @@ public class LettuceConnectionFactory getRedisPassword().toOptional().ifPresent(builder::withPassword); - builder.withSsl(clientConfiguration.useSsl()); + builder.withSsl(clientConfiguration.isUseSsl()); builder.withVerifyPeer(clientConfiguration.isVerifyPeer()); builder.withStartTls(clientConfiguration.isStartTls()); - builder.withTimeout(clientConfiguration.getTimeout().toMillis(), TimeUnit.MILLISECONDS); + builder.withTimeout(clientConfiguration.getCommandTimeout().toMillis(), TimeUnit.MILLISECONDS); return builder.build(); } @@ -827,9 +836,14 @@ public class LettuceConnectionFactory } private long getClientTimeout() { - return clientConfiguration.getTimeout().toMillis(); + return clientConfiguration.getCommandTimeout().toMillis(); } + /** + * Mutable implementation of {@link LettuceClientConfiguration}. + * + * @author Mark Paluch + */ static class MutableLettuceClientConfiguration implements LettuceClientConfiguration { private boolean useSsl; @@ -840,10 +854,10 @@ public class LettuceConnectionFactory private Duration shutdownTimeout = Duration.ofSeconds(RedisURI.DEFAULT_TIMEOUT); /* (non-Javadoc) - * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration#useSsl() + * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration#isUseSsl() */ @Override - public boolean useSsl() { + public boolean isUseSsl() { return useSsl; } @@ -899,7 +913,7 @@ public class LettuceConnectionFactory * @see org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration#getTimeout() */ @Override - public Duration getTimeout() { + public Duration getCommandTimeout() { return timeout; } diff --git a/src/test/java/org/springframework/data/redis/connection/RedisPasswordUnitTests.java b/src/test/java/org/springframework/data/redis/connection/RedisPasswordUnitTests.java index a152b4b7b..4c36f29f0 100644 --- a/src/test/java/org/springframework/data/redis/connection/RedisPasswordUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/RedisPasswordUnitTests.java @@ -23,6 +23,7 @@ import org.junit.Test; * Unit tests for {@link RedisPassword}. * * @author Mark Paluch + * @author Christoph Strobl */ public class RedisPasswordUnitTests { @@ -48,6 +49,6 @@ public class RedisPasswordUnitTests { @Test // DATAREDIS-574 public void toStringShouldHideValue() { - assertThat(RedisPassword.of("foo".toCharArray()).toString()).startsWith("RedisPassword[***"); + assertThat(RedisPassword.of("foo".toCharArray()).toString()).startsWith("RedisPassword[**").doesNotContain("foo"); } } diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisClientConfigurationUnitTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisClientConfigurationUnitTests.java index 4bac761c4..fe9ea64d5 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisClientConfigurationUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisClientConfigurationUnitTests.java @@ -40,7 +40,7 @@ public class JedisClientConfigurationUnitTests { @Test // DATAREDIS-574 public void shouldCreateEmptyConfiguration() { - JedisClientConfiguration configuration = JedisClientConfiguration.create(); + JedisClientConfiguration configuration = JedisClientConfiguration.defaultConfiguration(); assertThat(configuration.getClientName()).isEmpty(); assertThat(configuration.getConnectTimeout()).isEqualTo(Duration.ofSeconds(2)); @@ -69,7 +69,7 @@ public class JedisClientConfigurationUnitTests { .usePooling().poolConfig(poolConfig) // .build(); - assertThat(configuration.useSsl()).isTrue(); + assertThat(configuration.isUseSsl()).isTrue(); assertThat(configuration.getHostnameVerifier()).contains(MyHostnameVerifier.INSTANCE); assertThat(configuration.getSslParameters()).contains(sslParameters); assertThat(configuration.getSslSocketFactory()).contains(socketFactory); @@ -81,18 +81,6 @@ public class JedisClientConfigurationUnitTests { assertThat(configuration.getPoolConfig()).contains(poolConfig); } - @Test // DATAREDIS-574 - public void shouldAllowsConfigurationOverrides() { - - JedisClientConfiguration configuration = JedisClientConfiguration.builder().useSsl() // - .and().usePlaintext() // - .usePooling().and().useUnpooledConnections() // - .build(); - - assertThat(configuration.useSsl()).isFalse(); - assertThat(configuration.usePooling()).isFalse(); - } - enum MyHostnameVerifier implements HostnameVerifier { INSTANCE; diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryIntegrationTests.java index 8b390072a..1799e26b0 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryIntegrationTests.java @@ -60,7 +60,7 @@ public class JedisConnectionFactoryIntegrationTests { factory = new JedisConnectionFactory( new RedisStandaloneConfiguration(SettingsUtils.getHost(), SettingsUtils.getPort()), - JedisClientConfiguration.create()); + JedisClientConfiguration.defaultConfiguration()); factory.afterPropertiesSet(); assertThat(factory.getConnection().ping(), equalTo("PONG")); diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java index 88aa5fd7a..b47d76627 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java @@ -104,7 +104,7 @@ public class JedisConnectionFactoryUnitTests { RedisStandaloneConfiguration envConfig = new RedisStandaloneConfiguration(); envConfig.setPassword(RedisPassword.of("foo")); - connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getPassword()).isEqualTo("foo"); } @@ -115,7 +115,7 @@ public class JedisConnectionFactoryUnitTests { RedisStandaloneConfiguration envConfig = new RedisStandaloneConfiguration(); envConfig.setPassword(RedisPassword.of("foo")); - connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.defaultConfiguration()); connectionFactory.setPassword("bar"); assertThat(connectionFactory.getPassword()).isEqualTo("bar"); @@ -128,7 +128,7 @@ public class JedisConnectionFactoryUnitTests { RedisSentinelConfiguration envConfig = new RedisSentinelConfiguration(); envConfig.setPassword(RedisPassword.of("foo")); - connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getPassword()).isEqualTo("foo"); } @@ -139,7 +139,7 @@ public class JedisConnectionFactoryUnitTests { RedisSentinelConfiguration envConfig = new RedisSentinelConfiguration(); envConfig.setPassword(RedisPassword.of("foo")); - connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.defaultConfiguration()); connectionFactory.setPassword("bar"); assertThat(connectionFactory.getPassword()).isEqualTo("bar"); @@ -152,7 +152,7 @@ public class JedisConnectionFactoryUnitTests { RedisClusterConfiguration envConfig = new RedisClusterConfiguration(); envConfig.setPassword(RedisPassword.of("foo")); - connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getPassword()).isEqualTo("foo"); } @@ -163,7 +163,7 @@ public class JedisConnectionFactoryUnitTests { RedisClusterConfiguration envConfig = new RedisClusterConfiguration(); envConfig.setPassword(RedisPassword.of("foo")); - connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.defaultConfiguration()); connectionFactory.setPassword("bar"); assertThat(connectionFactory.getPassword()).isEqualTo("bar"); @@ -176,7 +176,7 @@ public class JedisConnectionFactoryUnitTests { RedisStandaloneConfiguration envConfig = new RedisStandaloneConfiguration(); envConfig.setDatabase(2); - connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getDatabase()).isEqualTo(2); } @@ -187,7 +187,7 @@ public class JedisConnectionFactoryUnitTests { RedisStandaloneConfiguration envConfig = new RedisStandaloneConfiguration(); envConfig.setDatabase(2); - connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.defaultConfiguration()); connectionFactory.setDatabase(3); assertThat(connectionFactory.getDatabase()).isEqualTo(3); @@ -200,7 +200,7 @@ public class JedisConnectionFactoryUnitTests { RedisSentinelConfiguration envConfig = new RedisSentinelConfiguration(); envConfig.setDatabase(2); - connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getDatabase()).isEqualTo(2); } @@ -211,7 +211,7 @@ public class JedisConnectionFactoryUnitTests { RedisSentinelConfiguration envConfig = new RedisSentinelConfiguration(); envConfig.setDatabase(2); - connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(envConfig, JedisClientConfiguration.defaultConfiguration()); connectionFactory.setDatabase(3); assertThat(connectionFactory.getDatabase()).isEqualTo(3); @@ -250,7 +250,7 @@ public class JedisConnectionFactoryUnitTests { public void shouldReturnStandaloneConfiguration() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); - connectionFactory = new JedisConnectionFactory(configuration, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(configuration, JedisClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getStandaloneConfiguration()).isSameAs(configuration); assertThat(connectionFactory.getSentinelConfiguration()).isNull(); @@ -261,7 +261,7 @@ public class JedisConnectionFactoryUnitTests { public void shouldReturnSentinelConfiguration() { RedisSentinelConfiguration configuration = new RedisSentinelConfiguration(); - connectionFactory = new JedisConnectionFactory(configuration, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(configuration, JedisClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getStandaloneConfiguration()).isNotNull(); assertThat(connectionFactory.getSentinelConfiguration()).isSameAs(configuration); @@ -272,7 +272,7 @@ public class JedisConnectionFactoryUnitTests { public void shouldReturnClusterConfiguration() { RedisClusterConfiguration configuration = new RedisClusterConfiguration(); - connectionFactory = new JedisConnectionFactory(configuration, JedisClientConfiguration.create()); + connectionFactory = new JedisConnectionFactory(configuration, JedisClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getStandaloneConfiguration()).isNotNull(); assertThat(connectionFactory.getSentinelConfiguration()).isNull(); @@ -283,7 +283,7 @@ public class JedisConnectionFactoryUnitTests { public void shouldDenyChangesToImmutableClientConfiguration() throws NoSuchAlgorithmException { connectionFactory = new JedisConnectionFactory(new RedisStandaloneConfiguration(), - JedisClientConfiguration.create()); + JedisClientConfiguration.defaultConfiguration()); connectionFactory.setClientName("foo"); } diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfigurationUnitTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfigurationUnitTests.java index 17191980c..ebfb765f6 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfigurationUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfigurationUnitTests.java @@ -34,14 +34,14 @@ public class LettuceClientConfigurationUnitTests { @Test // DATAREDIS-574 public void shouldCreateEmptyConfiguration() { - LettuceClientConfiguration configuration = LettuceClientConfiguration.create(); + LettuceClientConfiguration configuration = LettuceClientConfiguration.defaultConfiguration(); - assertThat(configuration.useSsl()).isFalse(); + assertThat(configuration.isUseSsl()).isFalse(); assertThat(configuration.isVerifyPeer()).isTrue(); assertThat(configuration.isStartTls()).isFalse(); assertThat(configuration.getClientOptions()).isEmpty(); assertThat(configuration.getClientResources()).isEmpty(); - assertThat(configuration.getTimeout()).isEqualTo(Duration.ofSeconds(60)); + assertThat(configuration.getCommandTimeout()).isEqualTo(Duration.ofSeconds(60)); assertThat(configuration.getShutdownTimeout()).isEqualTo(Duration.ofSeconds(2)); } @@ -53,30 +53,20 @@ public class LettuceClientConfigurationUnitTests { LettuceClientConfiguration configuration = LettuceClientConfiguration.builder() // .useSsl() // - .verifyPeer(false) // + .disablePeerVerification() // .startTls().and() // .clientOptions(clientOptions) // .clientResources(sharedClientResources) // - .timeout(Duration.ofMinutes(5)) // + .commandTimeout(Duration.ofMinutes(5)) // .shutdownTimeout(Duration.ofHours(2)) // .build(); - assertThat(configuration.useSsl()).isTrue(); + assertThat(configuration.isUseSsl()).isTrue(); assertThat(configuration.isVerifyPeer()).isFalse(); assertThat(configuration.isStartTls()).isTrue(); assertThat(configuration.getClientOptions()).contains(clientOptions); assertThat(configuration.getClientResources()).contains(sharedClientResources); - assertThat(configuration.getTimeout()).isEqualTo(Duration.ofMinutes(5)); + assertThat(configuration.getCommandTimeout()).isEqualTo(Duration.ofMinutes(5)); assertThat(configuration.getShutdownTimeout()).isEqualTo(Duration.ofHours(2)); } - - @Test // DATAREDIS-574 - public void shouldAllowsConfigurationOverrides() { - - LettuceClientConfiguration configuration = LettuceClientConfiguration.builder() // - .useSsl().and().usePlaintext() // - .build(); - - assertThat(configuration.useSsl()).isFalse(); - } } diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java index 8308eb5a1..f516728e5 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java @@ -292,7 +292,7 @@ public class LettuceConnectionFactoryUnitTests { envConfig.setPassword(RedisPassword.of("foo")); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(envConfig, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getPassword(), is(equalTo("foo"))); } @@ -304,7 +304,7 @@ public class LettuceConnectionFactoryUnitTests { envConfig.setPassword(RedisPassword.of("foo")); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(envConfig, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); connectionFactory.setPassword("bar"); assertThat(connectionFactory.getPassword(), is(equalTo("bar"))); @@ -318,7 +318,7 @@ public class LettuceConnectionFactoryUnitTests { envConfig.setPassword(RedisPassword.of("foo")); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(envConfig, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getPassword(), is(equalTo("foo"))); } @@ -330,7 +330,7 @@ public class LettuceConnectionFactoryUnitTests { envConfig.setPassword(RedisPassword.of("foo")); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(envConfig, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); connectionFactory.setPassword("bar"); assertThat(connectionFactory.getPassword(), is(equalTo("bar"))); @@ -344,7 +344,7 @@ public class LettuceConnectionFactoryUnitTests { envConfig.setPassword(RedisPassword.of("foo")); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(envConfig, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getPassword(), is(equalTo("foo"))); } @@ -356,7 +356,7 @@ public class LettuceConnectionFactoryUnitTests { envConfig.setPassword(RedisPassword.of("foo")); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(envConfig, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); connectionFactory.setPassword("bar"); assertThat(connectionFactory.getPassword(), is(equalTo("bar"))); @@ -370,7 +370,7 @@ public class LettuceConnectionFactoryUnitTests { envConfig.setDatabase(2); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(envConfig, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getDatabase(), is(2)); } @@ -382,7 +382,7 @@ public class LettuceConnectionFactoryUnitTests { envConfig.setDatabase(2); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(envConfig, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); connectionFactory.setDatabase(3); assertThat(connectionFactory.getDatabase(), is(3)); @@ -396,7 +396,7 @@ public class LettuceConnectionFactoryUnitTests { envConfig.setDatabase(2); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(envConfig, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getDatabase(), is(2)); } @@ -408,7 +408,7 @@ public class LettuceConnectionFactoryUnitTests { envConfig.setDatabase(2); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(envConfig, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); connectionFactory.setDatabase(3); assertThat(connectionFactory.getDatabase(), is(3)); @@ -423,11 +423,11 @@ public class LettuceConnectionFactoryUnitTests { LettuceClientConfiguration configuration = LettuceClientConfiguration.builder() // .useSsl() // - .verifyPeer(false) // + .disablePeerVerification() // .startTls().and() // .clientOptions(clientOptions) // .clientResources(sharedClientResources) // - .timeout(Duration.ofMinutes(5)) // + .commandTimeout(Duration.ofMinutes(5)) // .shutdownTimeout(Duration.ofHours(2)) // .build(); @@ -449,7 +449,7 @@ public class LettuceConnectionFactoryUnitTests { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(configuration, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getStandaloneConfiguration(), is(configuration)); assertThat(connectionFactory.getSentinelConfiguration(), is(nullValue())); @@ -461,7 +461,7 @@ public class LettuceConnectionFactoryUnitTests { RedisSentinelConfiguration configuration = new RedisSentinelConfiguration(); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(configuration, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getStandaloneConfiguration(), is(notNullValue())); assertThat(connectionFactory.getSentinelConfiguration(), is(configuration)); @@ -473,7 +473,7 @@ public class LettuceConnectionFactoryUnitTests { RedisClusterConfiguration configuration = new RedisClusterConfiguration(); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(configuration, - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); assertThat(connectionFactory.getStandaloneConfiguration(), is(notNullValue())); assertThat(connectionFactory.getSentinelConfiguration(), is(nullValue())); @@ -484,7 +484,7 @@ public class LettuceConnectionFactoryUnitTests { public void shouldDenyChangesToImmutableClientConfiguration() throws NoSuchAlgorithmException { LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(new RedisStandaloneConfiguration(), - LettuceClientConfiguration.create()); + LettuceClientConfiguration.defaultConfiguration()); connectionFactory.setUseSsl(false); } diff --git a/src/test/java/org/springframework/data/redis/core/AbstractOperationsTestParams.java b/src/test/java/org/springframework/data/redis/core/AbstractOperationsTestParams.java index ebf1ff1ad..05918c0f3 100644 --- a/src/test/java/org/springframework/data/redis/core/AbstractOperationsTestParams.java +++ b/src/test/java/org/springframework/data/redis/core/AbstractOperationsTestParams.java @@ -41,6 +41,7 @@ import org.springframework.oxm.xstream.XStreamMarshaller; * @author Jennifer Hickey * @author Thomas Darimont * @author Christoph Strobl + * @author Mark Paluch */ abstract public class AbstractOperationsTestParams { @@ -71,46 +72,46 @@ abstract public class AbstractOperationsTestParams { stringTemplate.setConnectionFactory(jedisConnectionFactory); stringTemplate.afterPropertiesSet(); - RedisTemplate longTemplate = new RedisTemplate(); + RedisTemplate longTemplate = new RedisTemplate<>(); longTemplate.setKeySerializer(new StringRedisSerializer()); - longTemplate.setValueSerializer(new GenericToStringSerializer(Long.class)); + longTemplate.setValueSerializer(new GenericToStringSerializer<>(Long.class)); longTemplate.setConnectionFactory(jedisConnectionFactory); longTemplate.afterPropertiesSet(); - RedisTemplate doubleTemplate = new RedisTemplate(); + RedisTemplate doubleTemplate = new RedisTemplate<>(); doubleTemplate.setKeySerializer(new StringRedisSerializer()); - doubleTemplate.setValueSerializer(new GenericToStringSerializer(Double.class)); + doubleTemplate.setValueSerializer(new GenericToStringSerializer<>(Double.class)); doubleTemplate.setConnectionFactory(jedisConnectionFactory); doubleTemplate.afterPropertiesSet(); - RedisTemplate rawTemplate = new RedisTemplate(); + RedisTemplate rawTemplate = new RedisTemplate<>(); rawTemplate.setEnableDefaultSerializer(false); rawTemplate.setConnectionFactory(jedisConnectionFactory); rawTemplate.afterPropertiesSet(); - RedisTemplate personTemplate = new RedisTemplate(); + RedisTemplate personTemplate = new RedisTemplate<>(); personTemplate.setConnectionFactory(jedisConnectionFactory); personTemplate.afterPropertiesSet(); OxmSerializer serializer = new OxmSerializer(xstream, xstream); - RedisTemplate xstreamStringTemplate = new RedisTemplate(); + RedisTemplate xstreamStringTemplate = new RedisTemplate<>(); xstreamStringTemplate.setConnectionFactory(jedisConnectionFactory); xstreamStringTemplate.setDefaultSerializer(serializer); xstreamStringTemplate.afterPropertiesSet(); - RedisTemplate xstreamPersonTemplate = new RedisTemplate(); + RedisTemplate xstreamPersonTemplate = new RedisTemplate<>(); xstreamPersonTemplate.setConnectionFactory(jedisConnectionFactory); xstreamPersonTemplate.setValueSerializer(serializer); xstreamPersonTemplate.afterPropertiesSet(); Jackson2JsonRedisSerializer jackson2JsonSerializer = new Jackson2JsonRedisSerializer(Person.class); - RedisTemplate jackson2JsonPersonTemplate = new RedisTemplate(); + RedisTemplate jackson2JsonPersonTemplate = new RedisTemplate<>(); jackson2JsonPersonTemplate.setConnectionFactory(jedisConnectionFactory); jackson2JsonPersonTemplate.setValueSerializer(jackson2JsonSerializer); jackson2JsonPersonTemplate.afterPropertiesSet(); GenericJackson2JsonRedisSerializer genericJackson2JsonSerializer = new GenericJackson2JsonRedisSerializer(); - RedisTemplate genericJackson2JsonPersonTemplate = new RedisTemplate(); + RedisTemplate genericJackson2JsonPersonTemplate = new RedisTemplate<>(); genericJackson2JsonPersonTemplate.setConnectionFactory(jedisConnectionFactory); genericJackson2JsonPersonTemplate.setValueSerializer(genericJackson2JsonSerializer); genericJackson2JsonPersonTemplate.afterPropertiesSet();