diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/redis/RedisAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/redis/RedisAutoConfiguration.java index 83a1cdbe11c..cdb347bd59a 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/redis/RedisAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/redis/RedisAutoConfiguration.java @@ -52,6 +52,7 @@ import redis.clients.jedis.JedisPoolConfig; * @author Christian Dupuis * @author Christoph Strobl * @author Phillip Webb + * @author Eddú Meléndez */ @Configuration @ConditionalOnClass({ JedisConnection.class, RedisOperations.class, Jedis.class }) @@ -83,6 +84,9 @@ public class RedisAutoConfiguration { factory.setPassword(this.properties.getPassword()); } factory.setDatabase(this.properties.getDatabase()); + if(this.properties.getTimeout() > 0) { + factory.setTimeout(this.properties.getTimeout()); + } return factory; } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/redis/RedisProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/redis/RedisProperties.java index 94c2f282889..776ae74753b 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/redis/RedisProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/redis/RedisProperties.java @@ -23,6 +23,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; * * @author Dave Syer * @author Christoph Strobl + * @author Eddú Meléndez */ @ConfigurationProperties(prefix = "spring.redis") public class RedisProperties { @@ -51,6 +52,11 @@ public class RedisProperties { private Sentinel sentinel; + /** + * Timeout to set in milliseconds. + */ + private int timeout; + public String getHost() { return this.host; } @@ -95,6 +101,14 @@ public class RedisProperties { return this.sentinel; } + public void setTimeout(int timeout) { + this.timeout = timeout; + } + + public int getTimeout() { + return this.timeout; + } + public void setSentinel(Sentinel sentinel) { this.sentinel = sentinel; } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/redis/RedisAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/redis/RedisAutoConfigurationTests.java index 80f942c48df..e96ebea3924 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/redis/RedisAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/redis/RedisAutoConfigurationTests.java @@ -19,6 +19,8 @@ package org.springframework.boot.autoconfigure.redis; import java.util.Arrays; import java.util.List; +import org.junit.After; +import org.junit.Before; import org.junit.Test; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.test.EnvironmentTestUtils; @@ -40,29 +42,34 @@ import static org.junit.Assert.assertTrue; * @author Dave Syer * @author Christian Dupuis * @author Christoph Strobl + * @author Eddú Meléndez */ public class RedisAutoConfigurationTests { private AnnotationConfigApplicationContext context; + @Before + public void setup() { + this.context = new AnnotationConfigApplicationContext(); + } + + @After + public void close() { + if (this.context != null) { + this.context.close(); + } + } + @Test public void testDefaultRedisConfiguration() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - this.context.register(RedisAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); + load(); assertNotNull(this.context.getBean("redisTemplate", RedisOperations.class)); assertNotNull(this.context.getBean(StringRedisTemplate.class)); } @Test public void testOverrideRedisConfiguration() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, "spring.redis.host:foo"); - EnvironmentTestUtils.addEnvironment(this.context, "spring.redis.database:1"); - this.context.register(RedisAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); + load("spring.redis.host:foo", "spring.redis.database:1"); assertEquals("foo", this.context.getBean(JedisConnectionFactory.class) .getHostName()); assertEquals(1, this.context.getBean(JedisConnectionFactory.class).getDatabase()); @@ -70,33 +77,29 @@ public class RedisAutoConfigurationTests { @Test public void testRedisConfigurationWithPool() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, "spring.redis.host:foo"); - EnvironmentTestUtils.addEnvironment(this.context, "spring.redis.pool.max-idle:1"); - this.context.register(RedisAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); + load("spring.redis.host:foo", "spring.redis.pool.max-idle:1"); assertEquals("foo", this.context.getBean(JedisConnectionFactory.class) .getHostName()); assertEquals(1, this.context.getBean(JedisConnectionFactory.class) .getPoolConfig().getMaxIdle()); } + @Test + public void testRedisConfigurationWithTimeout() throws Exception { + load("spring.redis.host:foo", "spring.redis.timeout:100"); + assertEquals("foo", this.context.getBean(JedisConnectionFactory.class) + .getHostName()); + assertEquals(100, this.context.getBean(JedisConnectionFactory.class) + .getTimeout()); + } + @Test public void testRedisConfigurationWithSentinel() throws Exception { List sentinels = Arrays.asList("127.0.0.1:26379", "127.0.0.1:26380"); if (isAtLeastOneSentinelAvailable(sentinels)) { - this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, - "spring.redis.sentinel.master:mymaster"); - EnvironmentTestUtils.addEnvironment( - this.context, - "spring.redis.sentinel.nodes:" - + StringUtils.collectionToCommaDelimitedString(sentinels)); - this.context.register(RedisAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); + load("spring.redis.sentinel.master:mymaster", "spring.redis.sentinel.nodes:" + + StringUtils.collectionToCommaDelimitedString(sentinels)); assertTrue(this.context.getBean(JedisConnectionFactory.class) .isRedisSentinelAware()); @@ -138,4 +141,18 @@ public class RedisAutoConfigurationTests { } } + private void load(String... environment) { + this.context = doLoad(environment); + } + + private AnnotationConfigApplicationContext doLoad( + String... environment) { + AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(); + EnvironmentTestUtils.addEnvironment(applicationContext, environment); + applicationContext.register(RedisAutoConfiguration.class, + PropertyPlaceholderAutoConfiguration.class); + applicationContext.refresh(); + return applicationContext; + } + }