diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java index 79e6b5e836..6640bb2cc0 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java @@ -55,6 +55,7 @@ * * @author Mark Paluch * @author Christoph Strobl + * @author Asmir Mustafic * @since 2.0 * @see #getConnection(Class) */ @@ -90,8 +91,18 @@ class LettucePoolingConnectionProvider implements LettuceConnectionProvider, Red public > T getConnection(Class connectionType) { GenericObjectPool> pool = pools.computeIfAbsent(connectionType, poolType -> { - return ConnectionPoolSupport.createGenericObjectPool(() -> connectionProvider.getConnection(connectionType), - poolConfig, false); + + GenericObjectPool> newPool = ConnectionPoolSupport + .createGenericObjectPool(() -> connectionProvider.getConnection(connectionType), poolConfig, false); + + try { + newPool.preparePool(); + + } catch (Exception ex) { + throw new PoolException("Could not prepare the pool", ex); + } + + return newPool; }); try { diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProviderUnitTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProviderUnitTests.java index ebd84f545e..b4b94ee809 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProviderUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProviderUnitTests.java @@ -20,6 +20,7 @@ import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.async.RedisAsyncCommands; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -27,11 +28,13 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; +import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder; /** * Unit tests for {@link LettucePoolingConnectionProvider}. * * @author Mark Paluch + * @author Asmir Mustafic */ @ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) @@ -70,4 +73,21 @@ void shouldDiscardTransactionOnReleaseOnActiveTransaction() { verify(commandsMock).discard(); } + + @Test + void shouldPrepareThePool() { + + GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); + poolConfig.setMinIdle(5); + poolConfig.setMaxIdle(8); + poolConfig.setMaxTotal(10); + + LettucePoolingClientConfiguration config = new LettucePoolingClientConfigurationBuilder().poolConfig(poolConfig) + .build(); + + LettucePoolingConnectionProvider provider = new LettucePoolingConnectionProvider(connectionProviderMock, config); + + provider.getConnection(StatefulRedisConnection.class); + verify(connectionProviderMock, times(5)).getConnection(any()); + } }