Я работаю над большим приложением Spring Boot 2.1.5.RELEASE, используя Caffeine в качестве поставщика кеша.Чтобы предотвратить узкие места ввода / вывода, я использую кофеин LoadingCache<K,V>
(по существу) следующим образом:
LoadingCache<K, V> cache = Caffeine.newBuilder()
.refreshAfterWrite(1, TimeUnit.MINUTES)
.build(loadStuffOverHttp());
Насколько я знаю, я не могу использовать функцию обновления после-записать функциональность без использования LoadingCache
.
Однако LoadingCache
не реализует Cache
. Spring. Это означает, что я не могу полагаться на @Bean
методызарегистрировать мои кеши, каждый из которых должен быть настроен по-разному.Регистрация в контексте Spring теоретически позволила бы использовать их в сочетании с аннотацией Spring * @Cacheable
.
Из того, что я вижу из исходного кода CaffeineCacheConfiguration.java , я не могу полагаться на автоконфигурацию Spring Boot.Бобы типа CaffeineCache
(кеш Spring шаблон адаптера для кофеина Cache<K,V>
) регистрируются автоматически, , но адаптер вынуждает меня использовать <Object, Object>
как общие типы моего CacheLoader<K, V>
.Я хочу сделать это только в крайнем случае.
Этот вопрос SO показывает, что можно программно настраивать различные кэши:
Просто предоставьте свои собственные кэшикак бобы.Они автоматически добавляются к CaffeineCacheManager
.
Однако, делая это с LoadingCache<K, V>
(с произвольными K
, V
, не <Object, Object>
) кажетсябыть сложнее.
Этот вопрос SO , кажется, указывает, что возможно сделать это с SimpleCacheManager
вместо CaffeineCacheManager
-но для использования этого решения требуется, чтобы определение CacheLoader
было доступно для компонента Cache
.Это может легко потребовать внедрения службы с использованием кеша через @Cacheable
, например, в случае дорогого HTTP-вызова.Это также кажется решением, склонным к циклам зависимости, но, пожалуйста, исправьте меня, если это не так.
Вопрос
Как правильно определить кофеин LoadingCache<K, V>
для использования сВесенние @Cacheable
?