package org.springframework.cloud.service.keyval;
import static org.springframework.cloud.service.Util.hasClass;
import org.springframework.cloud.service.AbstractServiceConnectorCreator;
import org.springframework.cloud.service.PooledServiceConnectorConfig;
import org.springframework.cloud.service.ServiceConnectorConfig;
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<RedisConnectionFactory, RedisServiceInfo> {
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(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 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));
}
}
}