用途に応じてCacheManagerの使い分けをしたい。

defaultでConcurrentMapCacheManagerを使い、CacheManagerの指定でRedisCacheManagerを使えるようにする。

Config

@Configuration
public class CacheConfig {

    @Primary
    @Bean
    public CacheManager cacheManager() {
        ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager();
        return cacheManager;
    }

    @Bean
    public CacheManager redisCacheManager(RedisTemplate<String, String> redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        cacheManager.setDefaultExpiration(3600);
        return cacheManager;
    }
}

@Primaryがついたものを同じ型のBeanのなかで優先することができます。
逆に指定せずに同じ型のBeanが複数定義されていると起動時に怒られます。

Cache

@Cacheable(cacheNames = "default")
public String default() {
    return "DEFAULT";
}

@Cacheable(cacheNames = "redis", cacheManager = "redisCacheManager")
public String redis() {
    return "REDIS";
}

今回の例だと、cacheManager指定なしでConcurrentMapCacheManagerが使われ
cacheManagerを指定することで、RedisCacheManagerを使うといったことが可能。

応用することで用途に応じてCacheManagerを使い分けができます。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.