Skip to content

Commit d7a73e7

Browse files
committed
Support Redis without commons-pool2
Update `LettuceConnectionConfiguration` so that `commons-pool2` can be an optional dependency. See gh-10480
1 parent 9f998d6 commit d7a73e7

File tree

1 file changed

+30
-21
lines changed

1 file changed

+30
-21
lines changed

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@
2222
import java.util.List;
2323

2424
import io.lettuce.core.RedisClient;
25-
import io.lettuce.core.cluster.RedisClusterClient;
2625
import io.lettuce.core.resource.ClientResources;
2726
import io.lettuce.core.resource.DefaultClientResources;
28-
import org.apache.commons.pool2.impl.GenericObjectPool;
2927
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
3028

3129
import org.springframework.beans.factory.ObjectProvider;
@@ -50,8 +48,7 @@
5048
* @author Andy Wilkinson
5149
*/
5250
@Configuration
53-
@ConditionalOnClass({ GenericObjectPool.class, RedisClient.class,
54-
RedisClusterClient.class })
51+
@ConditionalOnClass(RedisClient.class)
5552
class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
5653

5754
private final RedisProperties properties;
@@ -84,15 +81,6 @@ public LettuceConnectionFactory redisConnectionFactory(
8481
return createLettuceConnectionFactory(clientConfig);
8582
}
8683

87-
private static GenericObjectPoolConfig lettucePoolConfig(RedisProperties.Pool props) {
88-
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
89-
config.setMaxTotal(props.getMaxActive());
90-
config.setMaxIdle(props.getMaxIdle());
91-
config.setMinIdle(props.getMinIdle());
92-
config.setMaxWaitMillis(props.getMaxWait());
93-
return config;
94-
}
95-
9684
private LettuceConnectionFactory createLettuceConnectionFactory(
9785
LettuceClientConfiguration clientConfiguration) {
9886
if (getSentinelConfig() != null) {
@@ -107,14 +95,7 @@ private LettuceConnectionFactory createLettuceConnectionFactory(
10795

10896
private LettuceClientConfiguration getLettuceClientConfiguration(
10997
ClientResources clientResources, Pool pool) {
110-
LettuceClientConfigurationBuilder builder;
111-
if (pool != null) {
112-
builder = LettucePoolingClientConfiguration.builder()
113-
.poolConfig(lettucePoolConfig(pool));
114-
}
115-
else {
116-
builder = LettuceClientConfiguration.builder();
117-
}
98+
LettuceClientConfigurationBuilder builder = createBuilder(pool);
11899
applyProperties(builder);
119100
if (StringUtils.hasText(this.properties.getUrl())) {
120101
customizeConfigurationFromUrl(builder);
@@ -124,6 +105,13 @@ private LettuceClientConfiguration getLettuceClientConfiguration(
124105
return builder.build();
125106
}
126107

108+
private LettuceClientConfigurationBuilder createBuilder(Pool pool) {
109+
if (pool == null) {
110+
return LettuceClientConfiguration.builder();
111+
}
112+
return new PoolBuilderFactory().createBuilder(pool);
113+
}
114+
127115
private LettuceClientConfigurationBuilder applyProperties(
128116
LettuceClientConfiguration.LettuceClientConfigurationBuilder builder) {
129117
if (this.properties.isSsl()) {
@@ -157,4 +145,25 @@ private void customize(
157145
}
158146
}
159147

148+
/**
149+
* Inner class to allow optional commons-pool2 dependency.
150+
*/
151+
private static class PoolBuilderFactory {
152+
153+
public LettuceClientConfigurationBuilder createBuilder(Pool properties) {
154+
return LettucePoolingClientConfiguration.builder()
155+
.poolConfig(getPoolConfig(properties));
156+
}
157+
158+
private GenericObjectPoolConfig getPoolConfig(Pool properties) {
159+
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
160+
config.setMaxTotal(properties.getMaxActive());
161+
config.setMaxIdle(properties.getMaxIdle());
162+
config.setMinIdle(properties.getMinIdle());
163+
config.setMaxWaitMillis(properties.getMaxWait());
164+
return config;
165+
}
166+
167+
}
168+
160169
}

0 commit comments

Comments
 (0)