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
(デフォルトとして)1つのパラメータのオブジェクトを返すことを確認してください。または、cacheManagerを直接使用しないようにputToCache
メソッドBookService
を公開します。
@CachePut(value = "books", key = "#book.isbn")
public Book putToCache(Book book) {
return book;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加