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

com.github.anonymousmister.bootfastconfig.cache.L2CacheConfig Maven / Gradle / Ivy

package com.github.anonymousmister.bootfastconfig.cache;

import com.github.anonymousmister.bootfastconfig.cache.properties.CacheConfigProperties;
import com.github.anonymousmister.bootfastconfig.cache.properties.L2CacheProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;

/**
 * @author mister
 */
@ConditionalOnClass(value = {CaffeineCacheManager.class, RedisCacheManager.class})
public class L2CacheConfig {


    @Autowired
    private L2CacheProperties l2Cache;


    @Autowired
    private ConfigurableApplicationContext applicationContext;

    @Bean(CacheBeanNameConstant.L2_CACHE_MANAGER)
    public RedisCaffeineL2CacheManager cacheManager(CaffeineCacheManager caffeineCacheManager, RedisCacheManager redisCacheManager, RedisTemplate redisTemplate) {
        return new RedisCaffeineL2CacheManager(l2Cache, redisTemplate, caffeineCacheManager, redisCacheManager);
    }

    @Bean
    @ConditionalOnBean(RedisCaffeineL2CacheManager.class)
    public RedisMessageListenerContainer redisMessageListenerContainer(RedisTemplate redisTemplate,
                                                                       RedisCaffeineL2CacheManager redisCaffeineL2CacheManager) {
        RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
        redisMessageListenerContainer.setConnectionFactory(redisTemplate.getConnectionFactory());
        CacheMessageRedisListener cacheMessageListener = new CacheMessageRedisListener(redisTemplate, redisCaffeineL2CacheManager);
        redisMessageListenerContainer.addMessageListener(cacheMessageListener, new ChannelTopic(l2Cache.getTopic()));
        return redisMessageListenerContainer;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy