diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/JedisConnectionConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/JedisConnectionConfiguration.java index fb5eaed15d..78cdcb22f6 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/JedisConnectionConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/JedisConnectionConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2018 the original author or authors. + * Copyright 2012-2019 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. @@ -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()); } 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 d69a51ef9a..46e6b1f8ac 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 @@ -1,5 +1,5 @@ /* - * Copyright 2012-2018 the original author or authors. + * Copyright 2012-2019 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. @@ -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()); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java index 8258ddd335..a1976b12a7 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2019 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. @@ -171,7 +171,8 @@ 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. + * setting only has an effect if both it and time between eviction runs are + * positive. */ private int minIdle = 0; @@ -188,6 +189,12 @@ public class RedisProperties { */ private Duration maxWait = Duration.ofMillis(-1); + /** + * Time between runs of the idle object evictor thread. When positive, the idle + * object evictor thread starts, otherwise no idle object eviction is performed. + */ + private Duration timeBetweenEvictionRuns; + public int getMaxIdle() { return this.maxIdle; } @@ -220,6 +227,14 @@ public class RedisProperties { this.maxWait = maxWait; } + public Duration getTimeBetweenEvictionRuns() { + return this.timeBetweenEvictionRuns; + } + + public void setTimeBetweenEvictionRuns(Duration timeBetweenEvictionRuns) { + this.timeBetweenEvictionRuns = timeBetweenEvictionRuns; + } + } /** diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationJedisTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationJedisTests.java index 158d873acd..7798195a01 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationJedisTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationJedisTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2018 the original author or authors. + * Copyright 2012-2019 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. @@ -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 { assertThat(cf.getPoolConfig().getMaxIdle()).isEqualTo(4); assertThat(cf.getPoolConfig().getMaxTotal()).isEqualTo(16); assertThat(cf.getPoolConfig().getMaxWaitMillis()).isEqualTo(2000); + assertThat(cf.getPoolConfig().getTimeBetweenEvictionRunsMillis()) + .isEqualTo(30000); }); } 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 af66c8ff7f..2a584a5ac1 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 @@ -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 { 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); }); }