From b6cd2c970ccb0b006c20f1411514f72985733405 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 28 Apr 2014 11:49:28 +0100 Subject: [PATCH] Use Jedis rather than Lettuce as preferred Redis client Salvatore has indicated that Jedis is his Java Redis client of choice. This commit updates the auto-configuration support, actuator and Redis starter accordingly. Completes #745 --- spring-boot-actuator/pom.xml | 10 ++-- .../metrics/repository/redis/RedisServer.java | 10 ++-- spring-boot-autoconfigure/pom.xml | 4 +- .../redis/RedisAutoConfiguration.java | 52 ++++++++----------- .../redis/RedisAutoConfigurationTests.java | 4 +- spring-boot-dependencies/pom.xml | 8 +-- .../spring-boot-starter-redis/pom.xml | 4 +- 7 files changed, 42 insertions(+), 50 deletions(-) diff --git a/spring-boot-actuator/pom.xml b/spring-boot-actuator/pom.xml index 98a781cae8..bb820b3ed4 100644 --- a/spring-boot-actuator/pom.xml +++ b/spring-boot-actuator/pom.xml @@ -48,11 +48,6 @@ metrics-core true - - com.lambdaworks - lettuce - true - javax.servlet javax.servlet-api @@ -108,6 +103,11 @@ jolokia-core true + + redis.clients + jedis + true + ch.qos.logback diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/repository/redis/RedisServer.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/repository/redis/RedisServer.java index 003b5f91c3..2ca3732c14 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/repository/redis/RedisServer.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/repository/redis/RedisServer.java @@ -23,7 +23,7 @@ import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import static org.junit.Assert.fail; @@ -36,7 +36,7 @@ public class RedisServer implements TestRule { private static final String EXTERNAL_SERVERS_REQUIRED = "EXTERNAL_SERVERS_REQUIRED"; - protected LettuceConnectionFactory resource; + protected JedisConnectionFactory resource; private final String resourceDescription = "Redis ConnectionFactory"; @@ -122,7 +122,7 @@ public class RedisServer implements TestRule { /** * Perform cleanup of the {@link #resource} field, which is guaranteed to be non null. - * + * * @throws Exception any exception thrown by this method will be logged and swallowed */ protected void cleanupResource() throws Exception { @@ -134,8 +134,8 @@ public class RedisServer implements TestRule { * {@link #resource} field with a valid resource and return normally, or throw an * exception. */ - protected LettuceConnectionFactory obtainResource() throws Exception { - LettuceConnectionFactory resource = new LettuceConnectionFactory(); + protected JedisConnectionFactory obtainResource() throws Exception { + JedisConnectionFactory resource = new JedisConnectionFactory(); resource.afterPropertiesSet(); resource.getConnection().close(); return resource; diff --git a/spring-boot-autoconfigure/pom.xml b/spring-boot-autoconfigure/pom.xml index 18eb347285..2e199f400c 100644 --- a/spring-boot-autoconfigure/pom.xml +++ b/spring-boot-autoconfigure/pom.xml @@ -147,8 +147,8 @@ true - com.lambdaworks - lettuce + redis.clients + jedis true 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 2a54a1a907..1c696f52ea 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 @@ -27,25 +27,24 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClas import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.PoolConfig; import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.lettuce.DefaultLettucePool; -import org.springframework.data.redis.connection.lettuce.LettuceConnection; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.data.redis.connection.lettuce.LettucePool; +import org.springframework.data.redis.connection.jedis.JedisConnection; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; -import com.lambdaworks.redis.RedisClient; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPoolConfig; /** * {@link EnableAutoConfiguration Auto-configuration} for Spring Data's Redis support. - * + * * @author Dave Syer + * @author Andy Wilkinson */ @Configuration -@ConditionalOnClass({ LettuceConnection.class, RedisOperations.class, RedisClient.class }) +@ConditionalOnClass({ JedisConnection.class, RedisOperations.class, Jedis.class }) @EnableConfigurationProperties public class RedisAutoConfiguration { @@ -59,8 +58,9 @@ public class RedisAutoConfiguration { @Bean @ConditionalOnMissingBean RedisConnectionFactory redisConnectionFactory() throws UnknownHostException { - LettuceConnectionFactory factory = new LettuceConnectionFactory( - this.properties.getHost(), this.properties.getPort()); + JedisConnectionFactory factory = new JedisConnectionFactory(); + factory.setHostName(this.properties.getHost()); + factory.setPort(this.properties.getPort()); if (this.properties.getPassword() != null) { factory.setPassword(this.properties.getPassword()); } @@ -80,35 +80,27 @@ public class RedisAutoConfiguration { @ConditionalOnMissingBean RedisConnectionFactory redisConnectionFactory() throws UnknownHostException { if (this.properties.getPool() != null) { - LettuceConnectionFactory factory = new LettuceConnectionFactory( - lettucePool()); + JedisConnectionFactory factory = new JedisConnectionFactory( + jedisPoolConfig()); return factory; } - LettuceConnectionFactory factory = new LettuceConnectionFactory( - this.properties.getHost(), this.properties.getPort()); + JedisConnectionFactory factory = new JedisConnectionFactory(); + factory.setHostName(this.properties.getHost()); + factory.setPort(this.properties.getPort()); if (this.properties.getPassword() != null) { factory.setPassword(this.properties.getPassword()); } return factory; } - @Bean - @ConditionalOnMissingBean - public LettucePool lettucePool() { - return new DefaultLettucePool(this.properties.getHost(), - this.properties.getPort(), poolConfig()); - } - - private PoolConfig poolConfig() { - PoolConfig pool = new PoolConfig(); + private JedisPoolConfig jedisPoolConfig() { + JedisPoolConfig config = new JedisPoolConfig(); RedisProperties.Pool props = this.properties.getPool(); - if (props != null) { - pool.setMaxActive(props.getMaxActive()); - pool.setMaxIdle(props.getMaxIdle()); - pool.setMinIdle(props.getMinIdle()); - pool.setMaxWait(props.getMaxWait()); - } - return pool; + config.setMaxActive(props.getMaxActive()); + config.setMaxIdle(props.getMaxIdle()); + config.setMinIdle(props.getMinIdle()); + config.setMaxWait(props.getMaxWait()); + return config; } } 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 0410c8e946..b842c7ac44 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 @@ -20,7 +20,7 @@ import org.junit.Test; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisOperations; import org.springframework.data.redis.core.StringRedisTemplate; @@ -51,7 +51,7 @@ public class RedisAutoConfigurationTests { this.context.register(RedisAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class); this.context.refresh(); - assertEquals("foo", this.context.getBean(LettuceConnectionFactory.class) + assertEquals("foo", this.context.getBean(JedisConnectionFactory.class) .getHostName()); } diff --git a/spring-boot-dependencies/pom.xml b/spring-boot-dependencies/pom.xml index 9db570e7af..0195d1a9df 100644 --- a/spring-boot-dependencies/pom.xml +++ b/spring-boot-dependencies/pom.xml @@ -65,12 +65,12 @@ 2.3.2 2.3.3 3.18.1-GA + 2.1.0 8.1.14.v20131031 2.3 1.2.0 1.2 4.11 - 2.3.3 3.1.1 1.2.17 1.1.2 @@ -155,9 +155,9 @@ ${commons-pool.version} - com.lambdaworks - lettuce - ${lettuce.version} + redis.clients + jedis + ${jedis.version} javax.servlet diff --git a/spring-boot-starters/spring-boot-starter-redis/pom.xml b/spring-boot-starters/spring-boot-starter-redis/pom.xml index 38f3000d25..0ecd8a9100 100644 --- a/spring-boot-starters/spring-boot-starter-redis/pom.xml +++ b/spring-boot-starters/spring-boot-starter-redis/pom.xml @@ -28,8 +28,8 @@ spring-data-redis - com.lambdaworks - lettuce + redis.clients + jedis