java – 如何在春季启动时加载@Cache?
作者:互联网
我正在使用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将返回一个参数的对象(默认情况下).或者,在BookService中公开putToCache方法以避免直接使用cacheManager.
@CachePut(value = "books", key = "#book.isbn")
public Book putToCache(Book book) {
return book;
}
标签:spring-cache,java,spring 来源: https://codeday.me/bug/20190926/1818069.html