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