package com.lambdaworks.redis.support;
import static com.lambdaworks.redis.LettuceStrings.isNotEmpty;
import java.net.URI;
import com.lambdaworks.redis.RedisURI;
import com.lambdaworks.redis.cluster.RedisClusterClient;
import com.lambdaworks.redis.internal.LettuceAssert;
/**
* Factory Bean for {@link RedisClusterClient} instances. Needs either a {@link URI} or a {@link RedisURI} as input and allows
* to reuse {@link com.lambdaworks.redis.resource.ClientResources}. URI Format: {@code
* redis://[password@]host[:port]
* }
*
* {@code
* rediss://[password@]host[:port]
* }
*
* @see RedisURI
* @see ClientResourcesFactoryBean
* @author Mark Paluch
* @since 3.0
*/
public class RedisClusterClientFactoryBean extends LettuceFactoryBeanSupport<RedisClusterClient> {
private boolean verifyPeer = false;
@Override
public void afterPropertiesSet() throws Exception {
if (getRedisURI() == null) {
URI uri = getUri();
LettuceAssert.isTrue(!uri.getScheme().equals(RedisURI.URI_SCHEME_REDIS_SENTINEL),
"Sentinel mode not supported when using RedisClusterClient");
RedisURI redisURI = RedisURI.create(uri);
if (isNotEmpty(getPassword())) {
redisURI.setPassword(getPassword());
}
if (RedisURI.URI_SCHEME_REDIS_SECURE.equals(uri.getScheme())
|| RedisURI.URI_SCHEME_REDIS_SECURE_ALT.equals(uri.getScheme())
|| RedisURI.URI_SCHEME_REDIS_TLS_ALT.equals(uri.getScheme())) {
redisURI.setVerifyPeer(verifyPeer);
}
setRedisURI(redisURI);
}
super.afterPropertiesSet();
}
@Override
protected void destroyInstance(RedisClusterClient instance) throws Exception {
instance.shutdown();
}
@Override
public Class<?> getObjectType() {
return RedisClusterClient.class;
}
@Override
protected RedisClusterClient createInstance() throws Exception {
if (getClientResources() != null) {
return RedisClusterClient.create(getClientResources(), getRedisURI());
}
return RedisClusterClient.create(getRedisURI());
}
public boolean isVerifyPeer() {
return verifyPeer;
}
public void setVerifyPeer(boolean verifyPeer) {
this.verifyPeer = verifyPeer;
}
}