1

我有一张表,其中包含需要缓存的经常读取、很少更改的记录(大约 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 实现这一点。

4

0 回答 0