基于一些配置参数的代码的可缓存抽象提取

时间:2015-08-05 06:48:47

标签: java spring caching redis spring-data

我在Spring启动应用程序中使用Redis缓存抽象。 经历了许多事情我已经达到了一个要求, 我想基于某些配置启用或禁用缓存。 以下是我使用缓存的代码:

  @Bean
public RedisConnectionFactory redisConnectionFactory(@Value("${redis.host}") String redisHost,
        @Value("${redis.port}") Integer redisPort) {
    JedisConnectionFactory cf = new JedisConnectionFactory();
    cf.setHostName(redisHost);
    cf.setPort(redisPort);
   return cf;
}

@Bean(name = "redisTemplate")
RedisTemplate<Object,Object> redisTemplate() {
    final RedisTemplate<Object,Object> template = new RedisTemplate<Object,Object>();
    template.setConnectionFactory(applicationContext.getBean(RedisConnectionFactory.class));
    return template;
}

@Bean
public CacheManager cacheManager() {
    RedisCacheManager redisCacheManager = new PieRedisCacheManager(
            (RedisTemplate<?, ?>) applicationContext.getBean("redisTemplate"));
    redisCacheManager.setUsePrefix(true);
    return redisCacheManager;
}

以下是我如何配置它:

rediscache=disable

假设我在属性文件中有一个变量:

@cacheable

有没有办法根据配置完全禁用缓存?

这样在我使用Site Date Present Absent Not Responded BAY 2015-08-02 1 0 0 BAY 2015-08-02 1 1 0 BAY 2015-08-03 1 1 0 BIS 2015-08-03 1 0 0 的第一个代码中,代码应该直接从数据库中获取数据

请建议。

1 个答案:

答案 0 :(得分:0)

是的,您可以使用配置控制缓存抽象。但它将根据配置设置完全启用或完全禁用。这是执行相同操作的代码段。 NoOpCacheManager是一种禁用缓存的方法,即使代码中包含@Cacheable参数也是如此。

@Value("${rediscache}")
private String isRedisCacheEnabled;

@Bean
public CacheManager cacheManager() {
    if(isRedisCacheEnabled) {
        RedisCacheManager redisCacheManager = new PieRedisCacheManager(
                (RedisTemplate<?, ?>) applicationContext.getBean("redisTemplate"));
        redisCacheManager.setUsePrefix(true);
        return redisCacheManager;
    } else {
        NoOpCacheManager noopCacheManager = new NoOpCacheManager();
        return noopCacheManager;
    }
}