From 7166d7408d085d2c9685f9f46d3bdfaf5b41116b Mon Sep 17 00:00:00 2001 From: Scott Frederick Date: Wed, 2 Mar 2016 11:42:24 -0600 Subject: [PATCH 1/3] Fix typo in log message. --- .../java/org/springframework/cloud/config/CloudScanHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/CloudScanHelper.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/CloudScanHelper.java index 9490fdb..93de751 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/CloudScanHelper.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/CloudScanHelper.java @@ -98,7 +98,7 @@ public class CloudScanHelper { "factoryBeanObjectType", serviceFactory.getObjectType()); registry.registerBeanDefinition(serviceInfo.getId(), definitionBuilder.getBeanDefinition()); } catch (Exception ex) { - logger.warning("Unable to create service for " + serviceInfo.getId() + " during service scanning. Skiping."); + logger.warning("Unable to create service for " + serviceInfo.getId() + " during service scanning. Skipping."); } } From 62a095614a48e253abe4a37718d0d34671be5971 Mon Sep 17 00:00:00 2001 From: Dr Nic Williams Date: Fri, 15 Apr 2016 13:39:32 -0400 Subject: [PATCH 2/3] remove bad html

[fixes #164] --- .../org/springframework/cloud/heroku/HerokuConnector.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuConnector.java b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuConnector.java index 6dd5a05..a0eb93a 100644 --- a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuConnector.java +++ b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuConnector.java @@ -18,7 +18,7 @@ import org.springframework.cloud.util.EnvironmentAccessor; /** * Implementation of CloudConnector for Heroku - *

+ * * Currently support Postgres (default provided), Mysql (Cleardb), MongoDb (MongoLab, MongoHQ, MongoSoup), * Redis (RedisToGo, RedisCloud, OpenRedis, RedisGreen), and AMQP (CloudAmqp). * @@ -98,4 +98,4 @@ public class HerokuConnector extends AbstractCloudConnector protected FallbackServiceInfoCreator getFallbackServiceInfoCreator() { return new FallbackBaseServiceInfoCreator(); } -} \ No newline at end of file +} From 7d5d9aea3d3393eda41157682a06dbbeff25ea1f Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Sun, 1 May 2016 19:42:54 +0200 Subject: [PATCH 3/3] Add support for lettuce Redis client configuration. Support lettuce as alternative Redis client. RedisConnectionFactory supports jedis and lettuce, depending on the available classes. --- build.gradle | 1 + .../build.gradle | 1 + .../keyval/RedisConnectionFactoryCreator.java | 41 +++++++++++++++---- ...disLettuceConnectionFactoryConfigurer.java | 28 +++++++++++++ 4 files changed, 62 insertions(+), 9 deletions(-) create mode 100644 spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisLettuceConnectionFactoryConfigurer.java diff --git a/build.gradle b/build.gradle index 6e0dcd0..ee408ad 100644 --- a/build.gradle +++ b/build.gradle @@ -23,6 +23,7 @@ ext { springDataMongoVersion = "1.4.3.RELEASE" jedisVersion = "2.1.0" + lettuceVersion = "3.4.3.Final" commonDbcpVersion = "1.4" commonDbcp2Version = "2.0" diff --git a/spring-cloud-spring-service-connector/build.gradle b/spring-cloud-spring-service-connector/build.gradle index ca7d8a3..c28d5ef 100644 --- a/spring-cloud-spring-service-connector/build.gradle +++ b/spring-cloud-spring-service-connector/build.gradle @@ -28,6 +28,7 @@ dependencies { exclude(group: 'org.springframework', module: 'spring-context-support') } optional("redis.clients:jedis:$jedisVersion") + optional("biz.paluch.redis:lettuce:$lettuceVersion") optional("org.springframework.data:spring-data-mongodb:$springDataMongoVersion") { exclude(group: 'org.springframework', module: 'spring-beans') diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryCreator.java index e332f79..b5fac9e 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryCreator.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryCreator.java @@ -9,39 +9,62 @@ import org.springframework.cloud.service.ServiceConnectorCreationException; import org.springframework.cloud.service.common.RedisServiceInfo; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; /** * Simplified access to creating Redis service objects. + * Supports Jedis and lettuce Redis clients. * * @author Ramnivas Laddad * @author Jennifer Hickey * @author Thomas Risberg - * + * @author Mark Paluch */ public class RedisConnectionFactoryCreator extends AbstractServiceConnectorCreator { - private static final String REDIS_CLIENT_CLASS_NAME = "redis.clients.jedis.Jedis"; - - RedisConnectionFactoryConfigurer configurer = new RedisConnectionFactoryConfigurer(); + private static final String JEDIS_CLASS_NAME = "redis.clients.jedis.Jedis"; + private static final String LETTUCE_CLASS_NAME = "com.lambdaworks.redis.RedisClient"; @Override public RedisConnectionFactory create(RedisServiceInfo serviceInfo, ServiceConnectorConfig serviceConnectorConfig) { - if (hasClass(REDIS_CLIENT_CLASS_NAME)) { + + if (hasClass(JEDIS_CLASS_NAME)) { + + RedisConnectionFactoryConfigurer configurer = new RedisConnectionFactoryConfigurer(); + JedisConnectionFactory connectionFactory = new JedisConnectionFactory(); connectionFactory.setHostName(serviceInfo.getHost()); connectionFactory.setPort(serviceInfo.getPort()); connectionFactory.setPassword(serviceInfo.getPassword()); + if (serviceConnectorConfig instanceof RedisConnectionFactoryConfig) { configurer.configure(connectionFactory, (RedisConnectionFactoryConfig) serviceConnectorConfig); } else { configurer.configure(connectionFactory, (PooledServiceConnectorConfig) serviceConnectorConfig); } + connectionFactory.afterPropertiesSet(); return connectionFactory; - } else { - throw new ServiceConnectorCreationException("Failed to create cloud Redis connection factory for " - + serviceInfo.getId() + " service. Jedis client implementation class (" - + REDIS_CLIENT_CLASS_NAME + ") not found"); + } + else if (hasClass(LETTUCE_CLASS_NAME)) { + + RedisLettuceConnectionFactoryConfigurer configurer = new RedisLettuceConnectionFactoryConfigurer(); + + LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(); + connectionFactory.setHostName(serviceInfo.getHost()); + connectionFactory.setPort(serviceInfo.getPort()); + connectionFactory.setPassword(serviceInfo.getPassword()); + + configurer.configure(connectionFactory, (RedisConnectionFactoryConfig) serviceConnectorConfig); + + connectionFactory.afterPropertiesSet(); + return connectionFactory; + } + else { + throw new ServiceConnectorCreationException(String.format("Failed to create cloud Redis connection factory " + + "for %s service. No client implementation classes " + + " of jedis or lettuce clients implementation (%s, %s) not found", serviceInfo.getId(), + JEDIS_CLASS_NAME, LETTUCE_CLASS_NAME)); } } } diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisLettuceConnectionFactoryConfigurer.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisLettuceConnectionFactoryConfigurer.java new file mode 100644 index 0000000..ec613f3 --- /dev/null +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisLettuceConnectionFactoryConfigurer.java @@ -0,0 +1,28 @@ +package org.springframework.cloud.service.keyval; + +import org.springframework.cloud.service.*; + +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; + +/** + * + * @author Mark Paluch + */ +public class RedisLettuceConnectionFactoryConfigurer implements ServiceConnectorConfigurer { + private MapServiceConnectionConfigurer mapServiceConnectionConfigurer = + new MapServiceConnectionConfigurer(); + + @Override + public LettuceConnectionFactory configure(LettuceConnectionFactory connectionFactory, RedisConnectionFactoryConfig config) { + if (config != null) { + configureConnection(connectionFactory, config); + } + return connectionFactory; + } + + private void configureConnection(LettuceConnectionFactory connectionFactory, RedisConnectionFactoryConfig config) { + if (config.getConnectionProperties() != null) { + mapServiceConnectionConfigurer.configure(connectionFactory, config.getConnectionProperties()); + } + } +}