diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientConfigurationBuilderCustomizer.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientConfigurationBuilderCustomizer.java index 750daecd9e2..1599a68310c 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientConfigurationBuilderCustomizer.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientConfigurationBuilderCustomizer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 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. @@ -23,7 +23,9 @@ import org.springframework.data.redis.connection.lettuce.LettuceClientConfigurat * Callback interface that can be implemented by beans wishing to customize the * {@link LettuceClientConfiguration} through a {@link LettuceClientConfigurationBuilder * LettuceClientConfiguration.LettuceClientConfigurationBuilder} whilst retaining default - * auto-configuration. + * auto-configuration. To customize only the + * {@link LettuceClientConfiguration#getClientOptions() client options} of the + * configuration, use {@link LettuceClientOptionsBuilderCustomizer} instead. * * @author Mark Paluch * @since 2.0.0 diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientOptionsBuilderCustomizer.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientOptionsBuilderCustomizer.java index 288c50f7d0d..625d8b6864d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientOptionsBuilderCustomizer.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientOptionsBuilderCustomizer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 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. @@ -17,21 +17,26 @@ package org.springframework.boot.autoconfigure.data.redis; import io.lettuce.core.ClientOptions; +import io.lettuce.core.ClientOptions.Builder; + +import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; /** * Callback interface that can be implemented by beans wishing to customize the - * {@link ClientOptions} through a {@link ClientOptions.Builder} whilst retaining default - * auto-configuration. + * {@link ClientOptions} of the {@link LettuceClientConfiguration} through a + * {@link Builder} whilst retaining default auto-configuration. To customize the entire + * configuration, use {@link LettuceClientConfigurationBuilderCustomizer} instead. * * @author Soohyun Lim + * @since 3.4.0 */ @FunctionalInterface public interface LettuceClientOptionsBuilderCustomizer { /** - * Customize the {@link ClientOptions.Builder}. + * Customize the {@link Builder}. * @param clientOptionsBuilder the builder to customize */ - void customize(ClientOptions.Builder clientOptionsBuilder); + void customize(Builder clientOptionsBuilder); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java index 4354d4cefd8..040eebd919c 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java @@ -91,7 +91,8 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration { ObjectProvider clientConfigurationBuilderCustomizers, ObjectProvider clientOptionsBuilderCustomizers, ClientResources clientResources) { - return createConnectionFactory(clientConfigurationBuilderCustomizers, clientOptionsBuilderCustomizers, clientResources); + return createConnectionFactory(clientConfigurationBuilderCustomizers, clientOptionsBuilderCustomizers, + clientResources); } @Bean @@ -101,7 +102,8 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration { ObjectProvider clientConfigurationBuilderCustomizers, ObjectProvider clientOptionsBuilderCustomizers, ClientResources clientResources) { - LettuceConnectionFactory factory = createConnectionFactory(clientConfigurationBuilderCustomizers, clientOptionsBuilderCustomizers, clientResources); + LettuceConnectionFactory factory = createConnectionFactory(clientConfigurationBuilderCustomizers, + clientOptionsBuilderCustomizers, clientResources); SimpleAsyncTaskExecutor executor = new SimpleAsyncTaskExecutor("redis-"); executor.setVirtualThreads(true); factory.setExecutor(executor); @@ -112,8 +114,8 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration { ObjectProvider clientConfigurationBuilderCustomizers, ObjectProvider clientOptionsBuilderCustomizers, ClientResources clientResources) { - LettuceClientConfiguration clientConfig = getLettuceClientConfiguration(clientConfigurationBuilderCustomizers, clientOptionsBuilderCustomizers, - clientResources, getProperties().getLettuce().getPool()); + LettuceClientConfiguration clientConfig = getLettuceClientConfiguration(clientConfigurationBuilderCustomizers, + clientOptionsBuilderCustomizers, clientResources, getProperties().getLettuce().getPool()); return createLettuceConnectionFactory(clientConfig); } @@ -167,7 +169,8 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration { } } - private ClientOptions createClientOptions(ObjectProvider clientConfigurationBuilderCustomizers) { + private ClientOptions createClientOptions( + ObjectProvider clientConfigurationBuilderCustomizers) { ClientOptions.Builder builder = initializeClientOptionsBuilder(); Duration connectTimeout = getProperties().getConnectTimeout(); if (connectTimeout != null) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationTests.java index 3e41e25a20b..4e0802ff589 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationTests.java @@ -127,8 +127,8 @@ class RedisAutoConfigurationTests { this.contextRunner.withUserConfiguration(CustomConfiguration.class).run((context) -> { LettuceConnectionFactory cf = context.getBean(LettuceConnectionFactory.class); assertThat(cf.isUseSsl()).isTrue(); - cf.getClientConfiguration().getClientOptions().ifPresent(options -> - assertThat(options.isAutoReconnect()).isFalse()); + assertThat(cf.getClientConfiguration().getClientOptions()) + .hasValueSatisfying((options) -> assertThat(options.isAutoReconnect()).isFalse()); }); } @@ -642,7 +642,7 @@ class RedisAutoConfigurationTests { @Bean LettuceClientOptionsBuilderCustomizer clientOptionsBuilderCustomizer() { - return builder -> builder.autoReconnect(false); + return (builder) -> builder.autoReconnect(false); } }