Можно ли адаптировать Caffeine LoadingCache для использования с @Cacheable Spring Boot? - PullRequest
0 голосов
/ 21 мая 2019

Я работаю над большим приложением 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?

...