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

com.github.bootfastconfig.cache.redis.RedissonConfiguration Maven / Gradle / Ivy

Go to download

Parent pom providing dependency and plugin management for applications built with Maven

The newest version!
package com.github.bootfastconfig.cache.redis;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.github.bootfastconfig.cache.properties.RedissonProperties;
import com.github.bootfastconfig.springtool.StringUtil;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.redisson.spring.data.connection.RedissonConnectionFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.LocalDateTime;
import java.util.Optional;


@Configuration
@ConditionalOnClass(value = {RedissonClient.class, RedissonConnectionFactory.class})
public class RedissonConfiguration {


    private final RedisProperties properties;

    private final RedissonProperties redissonProperties;

    RedissonConfiguration(RedisProperties properties, RedissonProperties redissonProperties) {
        this.properties = properties;
        this.redissonProperties = redissonProperties;
    }


    @Bean(destroyMethod = "shutdown")
    @ConditionalOnMissingBean(RedissonClient.class)
    public RedissonClient redissonClientResources() {
        Config config = new Config();
        SingleServerConfig singleServerConfig = config.useSingleServer();
        Optional.ofNullable(properties.getTimeout())
                .map(o -> Long.valueOf(o.toMillis()))
                .filter(o -> o > 0).ifPresent(o -> singleServerConfig.setTimeout(o.intValue()));
        if (redissonProperties.getPool() != null) {
            Optional.ofNullable(redissonProperties.getPool().getMaxIdle())
                    .filter(o -> o > 0)
                    .ifPresent(o -> singleServerConfig.setConnectionMinimumIdleSize(o));
            Optional.ofNullable(redissonProperties.getPool().getMaxActive())
                    .filter(o -> o > 0)
                    .ifPresent(o -> singleServerConfig.setConnectionPoolSize(o));
            Optional.ofNullable(redissonProperties.getPool().getMaxWait())
                    .map(o -> Long.valueOf(o.toMillis()))
                    .filter(o -> o > 0)
                    .ifPresent(o -> singleServerConfig.setIdleConnectionTimeout(o.intValue()));
        }
        singleServerConfig.setAddress("redis://" + properties.getHost() + ":" + properties.getPort());
        if (StringUtil.isNotBlank(properties.getPassword())) {
            singleServerConfig.setPassword(properties.getPassword());
        }
        singleServerConfig.setDatabase(properties.getDatabase());
        ObjectMapper mapper = new ObjectMapper();
        JavaTimeModule timeModule = new JavaTimeModule();
        timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
        timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());
        mapper.registerModule(timeModule);
        JsonJacksonCodec jsonJacksonCodec = new JsonJacksonCodec(mapper);
        config.setCodec(jsonJacksonCodec);
        return Redisson.create(config);
    }


    @Bean
    @ConditionalOnBean(RedissonClient.class)
    public RedissonConnectionFactory redisConnectionFactory(RedissonClient redissonClient) {
        RedissonConnectionFactory redissonConnectionFactory = new RedissonConnectionFactory(redissonClient);
        return redissonConnectionFactory;
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy