Browse Source

Enable minIdle by allowing timeBetweenEviction runs to be configured

See gh-16703
pull/16814/head
Gemini Kim 7 years ago committed by Andy Wilkinson
parent
commit
1659d46028
  1. 4
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/JedisConnectionConfiguration.java
  2. 4
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java
  3. 19
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java
  4. 15
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationJedisTests.java
  5. 3
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationTests.java

4
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/JedisConnectionConfiguration.java

@ -114,6 +114,10 @@ class JedisConnectionConfiguration extends RedisConnectionConfiguration { @@ -114,6 +114,10 @@ class JedisConnectionConfiguration extends RedisConnectionConfiguration {
config.setMaxTotal(pool.getMaxActive());
config.setMaxIdle(pool.getMaxIdle());
config.setMinIdle(pool.getMinIdle());
if (pool.getTimeBetweenEvictionRuns() != null) {
config.setTimeBetweenEvictionRunsMillis(
pool.getTimeBetweenEvictionRuns().toMillis());
}
if (pool.getMaxWait() != null) {
config.setMaxWaitMillis(pool.getMaxWait().toMillis());
}

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

@ -155,6 +155,10 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration { @@ -155,6 +155,10 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
config.setMaxTotal(properties.getMaxActive());
config.setMaxIdle(properties.getMaxIdle());
config.setMinIdle(properties.getMinIdle());
if (properties.getTimeBetweenEvictionRuns() != null) {
config.setTimeBetweenEvictionRunsMillis(
properties.getTimeBetweenEvictionRuns().toMillis());
}
if (properties.getMaxWait() != null) {
config.setMaxWaitMillis(properties.getMaxWait().toMillis());
}

19
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java

@ -172,6 +172,9 @@ public class RedisProperties { @@ -172,6 +172,9 @@ public class RedisProperties {
/**
* Target for the minimum number of idle connections to maintain in the pool. This
* setting only has an effect if it is positive.
*
* This setting only has an effect if it is positive and `timeBetweenEvictionRuns`
* is greater than zero.
*/
private int minIdle = 0;
@ -188,6 +191,14 @@ public class RedisProperties { @@ -188,6 +191,14 @@ public class RedisProperties {
*/
private Duration maxWait = Duration.ofMillis(-1);
/**
* Time to sleep between runs of the idle object evictor thread.
*
* When positive, the idle object evictor thread starts. When non-positive, no
* idle object evictor thread runs.
*/
private Duration timeBetweenEvictionRuns;
public int getMaxIdle() {
return this.maxIdle;
}
@ -220,6 +231,14 @@ public class RedisProperties { @@ -220,6 +231,14 @@ public class RedisProperties {
this.maxWait = maxWait;
}
public Duration getTimeBetweenEvictionRuns() {
return this.timeBetweenEvictionRuns;
}
public void setTimeBetweenEvictionRuns(Duration timeBetweenEvictionRuns) {
this.timeBetweenEvictionRuns = timeBetweenEvictionRuns;
}
}
/**

15
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationJedisTests.java

@ -134,11 +134,14 @@ public class RedisAutoConfigurationJedisTests { @@ -134,11 +134,14 @@ public class RedisAutoConfigurationJedisTests {
@Test
public void testRedisConfigurationWithPool() {
this.contextRunner.withPropertyValues("spring.redis.host:foo",
"spring.redis.jedis.pool.min-idle:1",
"spring.redis.jedis.pool.max-idle:4",
"spring.redis.jedis.pool.max-active:16",
"spring.redis.jedis.pool.max-wait:2000").run((context) -> {
this.contextRunner
.withPropertyValues("spring.redis.host:foo",
"spring.redis.jedis.pool.min-idle:1",
"spring.redis.jedis.pool.max-idle:4",
"spring.redis.jedis.pool.max-active:16",
"spring.redis.jedis.pool.max-wait:2000",
"spring.redis.jedis.pool.time-between-eviction-runs:30000")
.run((context) -> {
JedisConnectionFactory cf = context
.getBean(JedisConnectionFactory.class);
assertThat(cf.getHostName()).isEqualTo("foo");
@ -146,6 +149,8 @@ public class RedisAutoConfigurationJedisTests { @@ -146,6 +149,8 @@ public class RedisAutoConfigurationJedisTests {
assertThat(cf.getPoolConfig().getMaxIdle()).isEqualTo(4);
assertThat(cf.getPoolConfig().getMaxTotal()).isEqualTo(16);
assertThat(cf.getPoolConfig().getMaxWaitMillis()).isEqualTo(2000);
assertThat(cf.getPoolConfig().getTimeBetweenEvictionRunsMillis())
.isEqualTo(30000);
});
}

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

@ -155,6 +155,7 @@ public class RedisAutoConfigurationTests { @@ -155,6 +155,7 @@ public class RedisAutoConfigurationTests {
"spring.redis.lettuce.pool.max-idle:4",
"spring.redis.lettuce.pool.max-active:16",
"spring.redis.lettuce.pool.max-wait:2000",
"spring.redis.lettuce.pool.time-between-eviction-runs:30000",
"spring.redis.lettuce.shutdown-timeout:1000").run((context) -> {
LettuceConnectionFactory cf = context
.getBean(LettuceConnectionFactory.class);
@ -165,6 +166,8 @@ public class RedisAutoConfigurationTests { @@ -165,6 +166,8 @@ public class RedisAutoConfigurationTests {
assertThat(poolConfig.getMaxIdle()).isEqualTo(4);
assertThat(poolConfig.getMaxTotal()).isEqualTo(16);
assertThat(poolConfig.getMaxWaitMillis()).isEqualTo(2000);
assertThat(poolConfig.getTimeBetweenEvictionRunsMillis())
.isEqualTo(30000);
assertThat(cf.getShutdownTimeout()).isEqualTo(1000);
});
}

Loading…
Cancel
Save