使用自定义刷新和驱逐java在DAO上缓存实现

时间:2015-07-27 18:59:16

标签: java spring caching spring-cache

在我的应用程序中,我有一个场景,我必须每24小时刷新一次缓存。 我期待数据库停机,所以我需要在24小时后实现一个用例来刷新缓存,只有在数据库运行时。

我正在使用 spring-ehache ,我确实实现了每24小时刷新一次的简单缓存,但无法解决问题,以便在数据库停机时进行保留。

1 个答案:

答案 0 :(得分:1)

从概念上讲,您可以将调度和缓存逐出拆分为两个模块,只有在满足某些条件(在这种情况下,数据库的运行状况检查返回true)时才清除缓存:

<强> SomeCachedService.java

class SomeCachedService {
  @Autowired
  private YourDao dao;

  @Cacheable("your-cache")
  public YourData getData() {
    return dao.queryForData();
  }

  @CacheEvict("your-cache")
  public void evictCache() {
    // no body needed
  }
}

<强> CacheMonitor.java

class CacheMonitor {
  @Autowired
  private SomeCachedService service;

  @Autowired
  private YourDao dao;

  @Scheduled(fixedDelay = TimeUnit.DAYS.toMillis(1))
  public conditionallyClearCache() {
    if (dao.isDatabaseUp()) {
      service.evictCache();
    }  
  }
}

Ehcache also allows you to create a custom eviction algorithm但在这种情况下,文档似乎没有用处。