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 8706d6021..f2c8c7dd4 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
@@ -18,6 +18,7 @@ package org.springframework.data.redis.connection.lettuce;
import io.lettuce.core.ClientOptions;
import io.lettuce.core.ReadFrom;
import io.lettuce.core.RedisURI;
+import io.lettuce.core.TimeoutOptions;
import io.lettuce.core.resource.ClientResources;
import java.time.Duration;
@@ -37,7 +38,7 @@ import org.springframework.util.Assert;
*
Whether to verify peers using SSL
* Whether to use StartTLS
* Optional {@link ClientResources}
- * Optional {@link ClientOptions}
+ * Optional {@link ClientOptions}, defaults to {@link ClientOptions} with enabled {@link TimeoutOptions}.
* Optional client name
* Optional {@link ReadFrom}. Enables Master/Replica operations if configured.
* Client {@link Duration timeout}
@@ -132,7 +133,7 @@ public interface LettuceClientConfiguration {
* Start TLS
* no
* Client Options
- * none
+ * {@link ClientOptions} with enabled {@link io.lettuce.core.TimeoutOptions}
* Client Resources
* none
* Client name
@@ -163,7 +164,7 @@ public interface LettuceClientConfiguration {
boolean verifyPeer = true;
boolean startTls;
@Nullable ClientResources clientResources;
- @Nullable ClientOptions clientOptions;
+ ClientOptions clientOptions = ClientOptions.builder().timeoutOptions(TimeoutOptions.enabled()).build();
@Nullable String clientName;
@Nullable ReadFrom readFrom;
Duration timeout = Duration.ofSeconds(RedisURI.DEFAULT_TIMEOUT);
diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingClientConfiguration.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingClientConfiguration.java
index 3f7b362c1..09e87d48a 100644
--- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingClientConfiguration.java
+++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingClientConfiguration.java
@@ -59,7 +59,7 @@ public interface LettucePoolingClientConfiguration extends LettuceClientConfigur
* Start TLS
* no
* Client Options
- * none
+ * {@link ClientOptions} with enabled {@link io.lettuce.core.TimeoutOptions}
* Client Resources
* none
* Connect Timeout
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 0f9790413..e5d482c9c 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,7 +34,7 @@ import org.junit.Test;
*/
public class LettuceClientConfigurationUnitTests {
- @Test // DATAREDIS-574, DATAREDIS-576, DATAREDIS-667
+ @Test // DATAREDIS-574, DATAREDIS-576, DATAREDIS-667, DATAREDIS-918
public void shouldCreateEmptyConfiguration() {
LettuceClientConfiguration configuration = LettuceClientConfiguration.defaultConfiguration();
@@ -43,7 +43,11 @@ public class LettuceClientConfigurationUnitTests {
assertThat(configuration.isUseSsl()).isFalse();
assertThat(configuration.isVerifyPeer()).isTrue();
assertThat(configuration.isStartTls()).isFalse();
- assertThat(configuration.getClientOptions()).isEmpty();
+ assertThat(configuration.getClientOptions()).hasValueSatisfying(actual -> {
+
+ TimeoutOptions timeoutOptions = actual.getTimeoutOptions();
+ assertThat(timeoutOptions.isTimeoutCommands()).isTrue();
+ });
assertThat(configuration.getClientResources()).isEmpty();
assertThat(configuration.getClientName()).isEmpty();
assertThat(configuration.getCommandTimeout()).isEqualTo(Duration.ofSeconds(60));
diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettucePoolingClientConfigurationUnitTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettucePoolingClientConfigurationUnitTests.java
index e1e5f5dd8..87292f124 100644
--- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettucePoolingClientConfigurationUnitTests.java
+++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettucePoolingClientConfigurationUnitTests.java
@@ -18,6 +18,7 @@ package org.springframework.data.redis.connection.lettuce;
import static org.assertj.core.api.Assertions.*;
import io.lettuce.core.ClientOptions;
+import io.lettuce.core.TimeoutOptions;
import io.lettuce.core.resource.ClientResources;
import java.time.Duration;
@@ -33,7 +34,7 @@ import org.junit.Test;
*/
public class LettucePoolingClientConfigurationUnitTests {
- @Test // DATAREDIS-667
+ @Test // DATAREDIS-667, DATAREDIS-918
public void shouldCreateEmptyConfiguration() {
LettucePoolingClientConfiguration configuration = LettucePoolingClientConfiguration.defaultConfiguration();
@@ -42,7 +43,11 @@ public class LettucePoolingClientConfigurationUnitTests {
assertThat(configuration.isUseSsl()).isFalse();
assertThat(configuration.isVerifyPeer()).isTrue();
assertThat(configuration.isStartTls()).isFalse();
- assertThat(configuration.getClientOptions()).isEmpty();
+ assertThat(configuration.getClientOptions()).hasValueSatisfying(actual -> {
+
+ TimeoutOptions timeoutOptions = actual.getTimeoutOptions();
+ assertThat(timeoutOptions.isTimeoutCommands()).isTrue();
+ });
assertThat(configuration.getClientResources()).isEmpty();
assertThat(configuration.getCommandTimeout()).isEqualTo(Duration.ofSeconds(60));
assertThat(configuration.getShutdownTimeout()).isEqualTo(Duration.ofMillis(100));