Add connection timeout property for redis

See gh-3142
This commit is contained in:
Eddú Meléndez 2015-06-05 16:21:41 -05:00 committed by Stephane Nicoll
parent 98b6fafe92
commit 50eedefec1
3 changed files with 61 additions and 26 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<String> 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;
}
}