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

com.netflix.spinnaker.fiat.config.RedisConfig Maven / Gradle / Ivy

There is a newer version: 1.54.1
Show newest version
package com.netflix.spinnaker.fiat.config;

import com.netflix.spectator.api.Registry;
import com.netflix.spinnaker.kork.jedis.JedisClientDelegate;
import com.netflix.spinnaker.kork.jedis.RedisClientDelegate;
import com.netflix.spinnaker.kork.jedis.telemetry.InstrumentedJedisPool;
import java.net.URI;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import redis.clients.jedis.*;

@Slf4j
@Configuration
@ConditionalOnProperty("redis.connection")
public class RedisConfig {
  @Bean
  @ConfigurationProperties("redis")
  public GenericObjectPoolConfig redisPoolConfig() {
    GenericObjectPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(20);
    config.setMaxIdle(20);
    config.setMinIdle(5);
    return config;
  }

  @Bean
  public JedisPool jedisPool(
      @Value("${redis.connection:redis://localhost:6379}") String connection,
      @Value("${redis.timeout:2000}") int timeout,
      GenericObjectPoolConfig redisPoolConfig,
      Registry registry) {
    return createPool(redisPoolConfig, connection, timeout, registry);
  }

  @Bean
  RedisClientDelegate redisClientDelegate(JedisPool jedisPool) {
    return new JedisClientDelegate(jedisPool);
  }

  private static JedisPool createPool(
      GenericObjectPoolConfig redisPoolConfig, String connection, int timeout, Registry registry) {
    URI redisConnection = URI.create(connection);

    String host = redisConnection.getHost();
    int port = redisConnection.getPort() == -1 ? Protocol.DEFAULT_PORT : redisConnection.getPort();

    String path = redisConnection.getPath();
    if (StringUtils.isEmpty(path)) {
      path = "/" + Protocol.DEFAULT_DATABASE;
    }
    int database = Integer.parseInt(path.split("/", 2)[1]);

    String password = null;
    if (redisConnection.getUserInfo() != null) {
      password = redisConnection.getUserInfo().split(":", 2)[1];
    }

    boolean isSSL = redisConnection.getScheme().equals("rediss");

    if (redisPoolConfig == null) {
      redisPoolConfig = new GenericObjectPoolConfig();
    }

    return new InstrumentedJedisPool(
        registry,
        new JedisPool(redisPoolConfig, host, port, timeout, password, database, null, isSSL),
        "fiat");
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy