diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java index be88d7a4940..1686dc069a1 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java @@ -85,8 +85,16 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration { private LettuceConnectionFactory createLettuceConnectionFactory( ClientResources clientResources) { - return new LettuceConnectionFactory(applyProperties(createLettucePool(), - this.properties.getLettuce().getPool(), clientResources)); + return applyProperties( + new LettuceConnectionFactory(applyProperties(createLettucePool(), + this.properties.getLettuce().getPool(), clientResources))); + } + + private LettuceConnectionFactory applyProperties( + LettuceConnectionFactory connectionFactory) { + connectionFactory + .setShutdownTimeout(this.properties.getLettuce().getShutdownTimeout()); + return connectionFactory; } private DefaultLettucePool createLettucePool() { @@ -173,7 +181,7 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration { RedisProperties.Lettuce lettuce = this.properties.getLettuce(); if (lettuce.getShutdownTimeout() >= 0) { builder.shutdownTimeout(Duration - .ofSeconds(this.properties.getLettuce().getShutdownTimeout())); + .ofMillis(this.properties.getLettuce().getShutdownTimeout())); } } return builder; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java index f9b34bbb151..b84279353ad 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java @@ -316,7 +316,7 @@ public class RedisProperties { /** * Shutdown timeout in milliseconds. */ - private int shutdownTimeout = 2000; + private int shutdownTimeout = 100; /** * Lettuce pool configuration. diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationTests.java index 2df886f981d..35da86f4a43 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfigurationTests.java @@ -72,13 +72,15 @@ public class RedisAutoConfigurationTests { @Test public void testOverrideRedisConfiguration() { - load("spring.redis.host:foo", "spring.redis.database:1"); + load("spring.redis.host:foo", "spring.redis.database:1", + "spring.redis.lettuce.shutdown-timeout:500"); LettuceConnectionFactory cf = this.context .getBean(LettuceConnectionFactory.class); assertThat(cf.getHostName()).isEqualTo("foo"); assertThat(cf.getDatabase()).isEqualTo(1); assertThat(cf.getPassword()).isNull(); assertThat(cf.isUseSsl()).isFalse(); + assertThat(cf.getShutdownTimeout()).isEqualTo(500); } @Test @@ -118,7 +120,8 @@ public class RedisAutoConfigurationTests { load("spring.redis.host:foo", "spring.redis.lettuce.pool.min-idle:1", "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.max-wait:2000", + "spring.redis.lettuce.shutdown-timeout:1000"); LettuceConnectionFactory cf = this.context .getBean(LettuceConnectionFactory.class); assertThat(getDefaultLettucePool(cf).getHostName()).isEqualTo("foo"); @@ -127,6 +130,7 @@ public class RedisAutoConfigurationTests { assertThat(getDefaultLettucePool(cf).getPoolConfig().getMaxTotal()).isEqualTo(16); assertThat(getDefaultLettucePool(cf).getPoolConfig().getMaxWaitMillis()) .isEqualTo(2000); + assertThat(cf.getShutdownTimeout()).isEqualTo(1000); } @Test diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index 88f45dadb3f..7142341d310 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -886,7 +886,7 @@ content into your application; rather pick only the properties that you need. spring.redis.lettuce.pool.max-idle=8 # Max number of "idle" connections in the pool. Use a negative value to indicate an unlimited number of idle connections. spring.redis.lettuce.pool.max-wait=-1 # Maximum amount of time (in milliseconds) a connection allocation should block before throwing an exception when the pool is exhausted. Use a negative value to block indefinitely. spring.redis.lettuce.pool.min-idle=0 # Target for the minimum number of idle connections to maintain in the pool. This setting only has an effect if it is positive. - spring.redis.lettuce.shutdown-timeout=2000 # Shutdown timeout in milliseconds. + spring.redis.lettuce.shutdown-timeout=100 # Shutdown timeout in milliseconds. spring.redis.password= # Login password of the redis server. spring.redis.port=6379 # Redis server port. spring.redis.sentinel.master= # Name of Redis server.