用途に応じて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を使い分けができます。