我正在使用 spring-cache 来改进数据库查询,其工作原理如下:
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("books");
}
@Cacheable("books")
public Book getByIsbn(String isbn) {
return dao.findByIsbn(isbn);
}
但现在我想在启动时预填充完整的图书缓存。这意味着我想打电话dao.findAll()
并将所有值放入缓存中。该例行程序应当仅定期安排。
但是在使用时如何显式填充缓存@Cacheable
?
只需像以前一样使用缓存,添加一个调度程序来更新缓存,代码片段如下。
@Service
public 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)