Я использую JSR107 кеширование с Springboot.У меня есть следующий метод.
@CacheResult(cacheName = "books.byidAndCat")
public List<Book> getAllBooks(@CacheKey final String bookId, @CacheKey final BookCategory bookCat) {
return <<Make API calls and get actual books>>
}
Первый раз он выполняет реальные вызовы API, а второй раз загружает кеш без проблем.Я вижу следующую часть журнала.
Computed cache key SimpleKey [cb5bf774-24b4-41e5-b45c-2dd377493445,LT] for operation CacheResultOperation[CacheMethodDetails ...
Но проблема в том, что я хочу загрузить кеш, не совершая даже первого вызова API, просто необходимо заполнить кеш, как показано ниже.
String cacheKey = SimpleKeyGenerator.generateKey(bookId, bookCategory).toString();
cacheManager.getCache("books.byidAndCat").put(cacheKey, deviceList);
Когда я проверяю, хэш-код кеширования одинаков в обоих случаях, но он выполняет вызовы API.Если хэш-код одинаков в обоих случаях, почему он выполняет вызовы API без учета кэша?
При отладке классов Spring было установлено, что org.springframework.cache.interceptor.SimpleKeyGenerator используется с генерацией ключа кэша, даже если @CacheResult существует. РЕДАКТИРОВАТЬ и усовершенствовать вопрос:
Кроме того, если getAllBooks имеет перегруженные методы, а затем вызывает этот кэшированный метод через отдельный перегруженный метод, в этом случае также не работает кэширование метода.