Я использую кэширование 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 есть перегруженные методы, а затем вызвать этот кешированный метод через отдельный перегруженный метод, в этом случае также не работает кеширование методов.