gpt4 book ai didi

java - 如何在 Spring 启动时加载@Cache?

转载 作者:IT老高 更新时间:2023-10-28 13:54:34 25 4
gpt4 key购买 nike

我正在使用 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;
}

关于java - 如何在 Spring 启动时加载@Cache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27940704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com