Browse Source

Polish "Add a customizer for Lettuce's ClientOptions"

See gh-40484
pull/41262/head
Andy Wilkinson 2 years ago
parent
commit
1dfb4c9719
  1. 6
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientConfigurationBuilderCustomizer.java
  2. 15
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientOptionsBuilderCustomizer.java
  3. 13
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java
  4. 6
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationTests.java

6
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientConfigurationBuilderCustomizer.java

@ -1,5 +1,5 @@ @@ -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 @@ -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

15
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceClientOptionsBuilderCustomizer.java

@ -1,5 +1,5 @@ @@ -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 @@ @@ -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);
}

13
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 { @@ -91,7 +91,8 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
ObjectProvider<LettuceClientConfigurationBuilderCustomizer> clientConfigurationBuilderCustomizers,
ObjectProvider<LettuceClientOptionsBuilderCustomizer> clientOptionsBuilderCustomizers,
ClientResources clientResources) {
return createConnectionFactory(clientConfigurationBuilderCustomizers, clientOptionsBuilderCustomizers, clientResources);
return createConnectionFactory(clientConfigurationBuilderCustomizers, clientOptionsBuilderCustomizers,
clientResources);
}
@Bean
@ -101,7 +102,8 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration { @@ -101,7 +102,8 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
ObjectProvider<LettuceClientConfigurationBuilderCustomizer> clientConfigurationBuilderCustomizers,
ObjectProvider<LettuceClientOptionsBuilderCustomizer> 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 { @@ -112,8 +114,8 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
ObjectProvider<LettuceClientConfigurationBuilderCustomizer> clientConfigurationBuilderCustomizers,
ObjectProvider<LettuceClientOptionsBuilderCustomizer> 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 { @@ -167,7 +169,8 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
}
}
private ClientOptions createClientOptions(ObjectProvider<LettuceClientOptionsBuilderCustomizer> clientConfigurationBuilderCustomizers) {
private ClientOptions createClientOptions(
ObjectProvider<LettuceClientOptionsBuilderCustomizer> clientConfigurationBuilderCustomizers) {
ClientOptions.Builder builder = initializeClientOptionsBuilder();
Duration connectTimeout = getProperties().getConnectTimeout();
if (connectTimeout != null) {

6
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationTests.java

@ -127,8 +127,8 @@ class RedisAutoConfigurationTests { @@ -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 { @@ -642,7 +642,7 @@ class RedisAutoConfigurationTests {
@Bean
LettuceClientOptionsBuilderCustomizer clientOptionsBuilderCustomizer() {
return builder -> builder.autoReconnect(false);
return (builder) -> builder.autoReconnect(false);
}
}

Loading…
Cancel
Save