如何在spring启动时加载@Cache?
我正在使用spring-cache来改善数据库查询,如下所示可以正常工作:
@Beanpublic CacheManager cacheManager() {
return new ConcurrentMapCacheManager("books");
}
@Cacheable("books")
public Book getByIsbn(String isbn) {
return dao.findByIsbn(isbn);
}
但是现在我想在启动时预先填充完整的图书缓存。这意味着我要调用dao.findAll()
并将所有值放入缓存。该例程应仅定期进行安排。
但是在使用时如何显式填充缓存@Cacheable
?
回答:
像以前一样使用缓存,添加调度程序以更新缓存,下面是代码段。
@Servicepublic class CacheScheduler {
@Autowired
BookDao bookDao;
@Autowired
CacheManager cacheManager;
@PostConstruct
public void init() {
update();
scheduleUpdateAsync();
}
public void update() {
for (Book book : bookDao.findAll()) {
cacheManager.getCache("books").put(book.getIsbn(), book);
}
}
}
确保你KeyGenerator
将为一个参数返回对象(默认)。否则,请公开其中的putToCache
方法,BookService
以避免直接使用cacheManager。
@CachePut(value = "books", key = "#book.isbn")public Book putToCache(Book book) {
return book;
}
以上是 如何在spring启动时加载@Cache? 的全部内容, 来源链接: utcz.com/qa/426071.html