使用Spring的JSR-107注释预先填充缓存

时间:2015-05-11 11:46:59

标签: java spring caching ehcache jcache

我有一个表,其中包含经常读取,很少更改的记录(大约50,000个),我需要缓存这些记录。我希望在服务器启动时使用单个查询加载所有记录来预先填充缓存。我不确定使用Spring annotations时最好的方法是什么。我从文档中发现的唯一方法是在一个服务方法中加载所有实体,而不是将它们传递给另一个使用@CachePut注释的服务中的方法,并且不执行任何其他操作。

PreloaderService:

@AutoWired
private CacheService cacheService;

public void getAllWidgets() {
  List<Widget> widgets = ... load them in one query
  for (Widget widget: widgets) {
    cacheService.populate(widget); //must call a different class so that it Spring's proxy for @CachePut gets used
  }
}


CacheService:

@CachePut
public void populate(@CacheValue Widget widget){
  //do nothing else, all we need is the caching annotations to be processed
}

以上对我来说并不是很优雅,但看不到另一种方式。顺便说一下,我使用Ehcache以防下级API实现这一点。

0 个答案:

没有答案