All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.data.redis.connection.jedis.JedisClientConfiguration Maven / Gradle / Ivy

There is a newer version: 3.2.5
Show newest version
/*
 * Copyright 2017-2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.data.redis.connection.jedis;

import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Protocol;

import java.net.SocketAddress;
import java.time.Duration;
import java.util.Optional;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLSocketFactory;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;

/**
 * Redis client configuration for jedis. This configuration provides optional configuration elements such as
 * {@link SSLSocketFactory} and {@link JedisPoolConfig} specific to jedis client features.
 * 

* Providing optional elements allows a more specific configuration of the client: *

    *
  • Whether to use SSL
  • *
  • Optional {@link SSLSocketFactory}
  • *
  • Optional {@link SSLParameters}
  • *
  • Optional {@link HostnameVerifier}
  • *
  • Whether to use connection-pooling
  • *
  • Optional {@link GenericObjectPoolConfig}
  • *
  • Optional client name
  • *
  • Connect {@link Duration timeout}
  • *
  • Read {@link Duration timeout}
  • *
* * @author Mark Paluch * @author Christoph Strobl * @since 2.0 * @see redis.clients.jedis.Jedis * @see org.springframework.data.redis.connection.RedisStandaloneConfiguration * @see org.springframework.data.redis.connection.RedisSentinelConfiguration * @see org.springframework.data.redis.connection.RedisClusterConfiguration */ public interface JedisClientConfiguration { /** * @return {@literal true} to use SSL, {@literal false} to use unencrypted connections. */ boolean isUseSsl(); /** * @return the optional {@link SSLSocketFactory}. */ Optional getSslSocketFactory(); /** * @return the optional {@link SSLParameters}. */ Optional getSslParameters(); /** * @return the optional {@link HostnameVerifier}. */ Optional getHostnameVerifier(); /** * @return {@literal true} to use connection-pooling. */ boolean isUsePooling(); /** * @return the optional {@link GenericObjectPoolConfig}. */ Optional getPoolConfig(); /** * @return the optional client name to be set with {@code CLIENT SETNAME}. */ Optional getClientName(); /** * @return the connection timeout. * @see java.net.Socket#connect(SocketAddress, int) */ Duration getConnectTimeout(); /** * @return the read timeout. * @see java.net.Socket#setSoTimeout(int) */ Duration getReadTimeout(); /** * Creates a new {@link JedisClientConfigurationBuilder} to build {@link JedisClientConfiguration} to be used with the * jedis client. * * @return a new {@link JedisClientConfigurationBuilder} to build {@link JedisClientConfiguration}. */ static JedisClientConfigurationBuilder builder() { return new DefaultJedisClientConfigurationBuilder(); } /** * Creates a default {@link JedisClientConfiguration}. *
*
SSL enabled
*
no
*
Pooling enabled
*
no
*
Client Name
*
[not set]
*
Read Timeout
*
2000 msec
*
Connect Timeout
*
2000 msec
*
* * @return a {@link JedisClientConfiguration} with defaults. */ static JedisClientConfiguration defaultConfiguration() { return builder().build(); } /** * Builder for {@link JedisClientConfiguration}. */ interface JedisClientConfigurationBuilder { /** * Enable SSL connections. * * @return {@link JedisSslClientConfigurationBuilder}. */ JedisSslClientConfigurationBuilder useSsl(); /** * Enable connection-pooling. * * @return {@link JedisPoolingClientConfigurationBuilder}. */ JedisPoolingClientConfigurationBuilder usePooling(); /** * Configure a {@code clientName} to be set with {@code CLIENT SETNAME}. * * @param clientName must not be {@literal null}. * @return {@literal this} builder. * @throws IllegalArgumentException if clientName is {@literal null}. */ JedisClientConfigurationBuilder clientName(String clientName); /** * Configure a read timeout. * * @param readTimeout must not be {@literal null}. * @return {@literal this} builder. * @throws IllegalArgumentException if readTimeout is {@literal null}. */ JedisClientConfigurationBuilder readTimeout(Duration readTimeout); /** * Configure a connection timeout. * * @param connectTimeout must not be {@literal null}. * @return {@literal this} builder. * @throws IllegalArgumentException if connectTimeout is {@literal null}. */ JedisClientConfigurationBuilder connectTimeout(Duration connectTimeout); /** * Build the {@link JedisClientConfiguration} with the configuration applied from this builder. * * @return a new {@link JedisClientConfiguration} object. */ JedisClientConfiguration build(); } /** * Builder for Pooling-related {@link JedisClientConfiguration}. */ interface JedisPoolingClientConfigurationBuilder { /** * @param poolConfig must not be {@literal null}. * @return {@literal this} builder. * @throws IllegalArgumentException if poolConfig is {@literal null}. */ JedisPoolingClientConfigurationBuilder poolConfig(GenericObjectPoolConfig poolConfig); /** * Return to {@link JedisClientConfigurationBuilder}. * * @return {@link JedisClientConfigurationBuilder}. */ JedisClientConfigurationBuilder and(); /** * Build the {@link JedisClientConfiguration} with the configuration applied from this builder. * * @return a new {@link JedisClientConfiguration} object. */ JedisClientConfiguration build(); } /** * Builder for SSL-related {@link JedisClientConfiguration}. */ interface JedisSslClientConfigurationBuilder { /** * @param sslSocketFactory must not be {@literal null}. * @return {@literal this} builder. * @throws IllegalArgumentException if sslSocketFactory is {@literal null}. */ JedisSslClientConfigurationBuilder sslSocketFactory(SSLSocketFactory sslSocketFactory); /** * @param sslParameters must not be {@literal null}. * @return {@literal this} builder. * @throws IllegalArgumentException if sslParameters is {@literal null}. */ JedisSslClientConfigurationBuilder sslParameters(SSLParameters sslParameters); /** * @param hostnameVerifier must not be {@literal null}. * @return {@literal this} builder. * @throws IllegalArgumentException if hostnameVerifier is {@literal null}. */ JedisSslClientConfigurationBuilder hostnameVerifier(HostnameVerifier hostnameVerifier); /** * Return to {@link JedisClientConfigurationBuilder}. * * @return {@link JedisClientConfigurationBuilder}. */ JedisClientConfigurationBuilder and(); /** * Build the {@link JedisClientConfiguration} with the configuration applied from this builder. * * @return a new {@link JedisClientConfiguration} object. */ JedisClientConfiguration build(); } /** * Default {@link JedisClientConfigurationBuilder} implementation to build an immutable * {@link JedisClientConfiguration}. */ 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() {} /* * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#useSsl() */ @Override public JedisSslClientConfigurationBuilder useSsl() { this.useSsl = true; return this; } /* * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisSslClientConfigurationBuilder#sslSocketFactory(javax.net.ssl.SSLSocketFactory) */ @Override public JedisSslClientConfigurationBuilder sslSocketFactory(SSLSocketFactory sslSocketFactory) { Assert.notNull(sslSocketFactory, "SSLSocketFactory must not be null!"); this.sslSocketFactory = sslSocketFactory; return this; } /* * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisSslClientConfigurationBuilder#sslParameters(javax.net.ssl.SSLParameters) */ @Override public JedisSslClientConfigurationBuilder sslParameters(SSLParameters sslParameters) { Assert.notNull(sslParameters, "SSLParameters must not be null!"); this.sslParameters = sslParameters; return this; } /* * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisSslClientConfigurationBuilder#hostnameVerifier(javax.net.ssl.HostnameVerifier) */ @Override public JedisSslClientConfigurationBuilder hostnameVerifier(HostnameVerifier hostnameVerifier) { Assert.notNull(hostnameVerifier, "HostnameVerifier must not be null!"); this.hostnameVerifier = hostnameVerifier; return this; } /* * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#usePooling() */ @Override public JedisPoolingClientConfigurationBuilder usePooling() { this.usePooling = true; return this; } /* * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisPoolingClientConfigurationBuilder#poolConfig(org.apache.commons.pool2.impl.GenericObjectPoolConfig) */ @Override public JedisPoolingClientConfigurationBuilder poolConfig(GenericObjectPoolConfig poolConfig) { Assert.notNull(poolConfig, "GenericObjectPoolConfig must not be null!"); this.poolConfig = poolConfig; return this; } /* * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisPoolingClientConfigurationBuilder#and() */ @Override public JedisClientConfigurationBuilder and() { return this; } /* * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#clientName(java.lang.String) */ @Override public JedisClientConfigurationBuilder clientName(String clientName) { Assert.hasText(clientName, "Client name must not be null or empty!"); this.clientName = clientName; return this; } /* * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#readTimeout(java.time.Duration) */ @Override public JedisClientConfigurationBuilder readTimeout(Duration readTimeout) { Assert.notNull(readTimeout, "Duration must not be null!"); this.readTimeout = readTimeout; return this; } /* * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#connectTimeout(java.time.Duration) */ @Override public JedisClientConfigurationBuilder connectTimeout(Duration connectTimeout) { Assert.notNull(connectTimeout, "Duration must not be null!"); this.connectTimeout = connectTimeout; return this; } /* * (non-Javadoc) * @see org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder#build() */ @Override public JedisClientConfiguration build() { return new DefaultJedisClientConfiguration(useSsl, sslSocketFactory, sslParameters, hostnameVerifier, usePooling, poolConfig, clientName, readTimeout, connectTimeout); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy