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

io.github.wooenrico.redis.JedisConnectionConfiguration Maven / Gradle / Ivy

package io.github.wooenrico.redis;

import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.util.StringUtils;
import redis.clients.jedis.JedisPoolConfig;

public class JedisConnectionConfiguration extends RedisConnectionConfiguration {

    public JedisConnectionConfiguration(RedisProperties properties) {
        super(properties);
    }

    @Override
    public JedisConnectionFactory createRedisConnectionFactory() {
        return this.createJedisConnectionFactory();
    }

    public JedisConnectionFactory createJedisConnectionFactory() {
        JedisClientConfiguration clientConfiguration = this.getJedisClientConfiguration();
        // sentinel
        RedisSentinelConfiguration sentinelConfig = this.getSentinelConfig();
        if (sentinelConfig != null) {
            return new JedisConnectionFactory(sentinelConfig, clientConfiguration);
        }
        // cluster
        RedisClusterConfiguration clusterConfiguration = this.getClusterConfiguration();
        if (clusterConfiguration != null) {
            return new JedisConnectionFactory(clusterConfiguration, clientConfiguration);
        }
        // standalone
        return new JedisConnectionFactory(this.getStandaloneConfig(), clientConfiguration);
    }

    private JedisClientConfiguration getJedisClientConfiguration() {
        JedisClientConfiguration.JedisClientConfigurationBuilder builder = JedisClientConfiguration.builder();
        if (this.properties.getTimeout() != null) {
            builder.readTimeout(this.properties.getTimeout());
        }
        if (this.properties.getConnectTimeout() != null) {
            builder.connectTimeout(this.properties.getConnectTimeout());
        }
        if (this.properties.getClientName() != null) {
            builder.clientName(this.properties.getClientName());
        }
        // pool
        if (this.properties.getJedis() != null) {
            RedisProperties.Pool pool = this.properties.getJedis().getPool();
            if (pool != null && pool.getEnabled() != null && pool.getEnabled()) {
                builder.usePooling().poolConfig(this.jedisPoolConfig(pool));
            }
        }
        // ssl
        if (this.properties.isSsl()) {
            builder.useSsl();
        }
        if (StringUtils.hasText(this.properties.getUrl()) && this.urlUsesSsl()) {
            builder.useSsl();
        }
        return builder.build();
    }

    private JedisPoolConfig jedisPoolConfig(RedisProperties.Pool pool) {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(pool.getMaxActive());
        config.setMaxIdle(pool.getMaxIdle());
        config.setMinIdle(pool.getMinIdle());
        if (pool.getTimeBetweenEvictionRuns() != null) {
            config.setTimeBetweenEvictionRuns(pool.getTimeBetweenEvictionRuns());
        }
        if (pool.getMaxWait() != null) {
            config.setMaxWait(pool.getMaxWait());
        }

        return config;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy