public interface JedisClientConfiguration {
boolean isUseSsl();
Optional<SSLSocketFactory> getSslSocketFactory();
Optional<SSLParameters> getSslParameters();
Optional<HostnameVerifier> getHostnameVerifier();
boolean isUsePooling();
Optional<GenericObjectPoolConfig> getPoolConfig();
Optional<String> getClientName();
Duration getConnectTimeout();
Duration getReadTimeout();
static JedisClientConfigurationBuilder builder() {
return new DefaultJedisClientConfigurationBuilder();
}
/**
* Creates a default {@link JedisClientConfiguration}.
* <dl>
* <dt>SSL enabled</dt>
* <dd>no</dd>
* <dt>Pooling enabled</dt>
* <dd>no</dd>
* <dt>Client Name</dt>
* <dd>[not set]</dd>
* <dt>Read Timeout</dt>
* <dd>2000 msec</dd>
* <dt>Connect Timeout</dt>
* <dd>2000 msec</dd>
* </dl>
*
* @return a {@link JedisClientConfiguration} with defaults.
*/
static JedisClientConfiguration defaultConfiguration() {
return builder().build();
}
/**
* Builder for {@link JedisClientConfiguration}.
*/
interface JedisClientConfigurationBuilder {
JedisSslClientConfigurationBuilder useSsl();
JedisPoolingClientConfigurationBuilder usePooling();
JedisClientConfigurationBuilder clientName(String clientName);
JedisClientConfigurationBuilder readTimeout(Duration readTimeout);
JedisClientConfigurationBuilder connectTimeout(Duration connectTimeout);
JedisClientConfiguration build();
}
/**
* Builder for Pooling-related {@link JedisClientConfiguration}.
*/
interface JedisPoolingClientConfigurationBuilder {
JedisPoolingClientConfigurationBuilder poolConfig(GenericObjectPoolConfig poolConfig);
JedisClientConfigurationBuilder and();
JedisClientConfiguration build();
}
/**
* Builder for SSL-related {@link JedisClientConfiguration}.
*/
interface JedisSslClientConfigurationBuilder {
JedisSslClientConfigurationBuilder sslSocketFactory(SSLSocketFactory sslSocketFactory);
JedisSslClientConfigurationBuilder sslParameters(SSLParameters sslParameters);
JedisSslClientConfigurationBuilder hostnameVerifier(HostnameVerifier hostnameVerifier);
JedisClientConfigurationBuilder and();
JedisClientConfiguration build();
}
class DefaultJedisClientConfigurationBuilder implements JedisClientConfigurationBuilder,
JedisPoolingClientConfigurationBuilder, JedisSslClientConfigurationBuilder {
private boolean useSsl;
private @Nullable SSLSocketFactory sslSocketFactory;
private @Nullable SSLParameters sslParameters;
private @Nullable HostnameVerifier hostnameVerifier;
private boolean usePooling;
private GenericObjectPoolConfig poolConfig = new JedisPoolConfig();
private @Nullable String clientName;
private Duration readTimeout = Duration.ofMillis(Protocol.DEFAULT_TIMEOUT);
private Duration connectTimeout = Duration.ofMillis(Protocol.DEFAULT_TIMEOUT);
private DefaultJedisClientConfigurationBuilder() {}
@Override
public JedisSslClientConfigurationBuilder useSsl() {
this.useSsl = true;
return this;
}
@Override
public JedisSslClientConfigurationBuilder sslSocketFactory(SSLSocketFactory sslSocketFactory) {
this.sslSocketFactory = sslSocketFactory;
return this;
}
@Override
public JedisSslClientConfigurationBuilder sslParameters(SSLParameters sslParameters) {
this.sslParameters = sslParameters;
return this;
}
@Override
public JedisSslClientConfigurationBuilder hostnameVerifier(HostnameVerifier hostnameVerifier) {
this.hostnameVerifier = hostnameVerifier;
return this;
}
@Override
public JedisPoolingClientConfigurationBuilder usePooling() {
this.usePooling = true;
return this;
}
@Override
public JedisPoolingClientConfigurationBuilder poolConfig(GenericObjectPoolConfig poolConfig) {
this.poolConfig = poolConfig;
return this;
}
@Override
public JedisClientConfigurationBuilder and() {
return this;
}
@Override
public JedisClientConfigurationBuilder clientName(String clientName) {
this.clientName = clientName;
return this;
}
@Override
public JedisClientConfigurationBuilder readTimeout(Duration readTimeout) {
this.readTimeout = readTimeout;
return this;
}
@Override
public JedisClientConfigurationBuilder connectTimeout(Duration connectTimeout) {
this.connectTimeout = connectTimeout;
return this;
}
@Override
public JedisClientConfiguration build() {
return new DefaultJedisClientConfiguration(useSsl, sslSocketFactory, sslParameters, hostnameVerifier, usePooling,
poolConfig, clientName, readTimeout, connectTimeout);
}
}
}