我正在使用Caffeine作为缓存提供程序来开发大型Spring Boot 2.1.5.RELEASE应用程序。为了防止I / O瓶颈,我以下列方式(基本上)使用咖啡因LoadingCache<K,V>
:
LoadingCache<K, V> cache = Caffeine.newBuilder()
.refreshAfterWrite(1, TimeUnit.MINUTES)
.build(loadStuffOverHttp());
据我所知,如果不使用LoadingCache
,我将无法使用写后刷新功能。
但是,LoadingCache
没有实现Spring的Cache
。。这意味着我不能依靠@Bean
方法来注册我的缓存,每种方法都需要配置不一样。从理论上说,在Spring上下文中进行注册将允许它们与Spring的@Cacheable
注释一起使用。
从CaffeineCacheConfiguration.java的源代码中可以看到,我也不能依靠Spring Boot的自动配置。 CaffeineCache
类型的豆(咖啡因adapter pattern的Spring缓存Cache<K,V>
)会自动注册,但适配器会强制我将<Object, Object>
用作我的{ {3}} 。我只想作为最后的选择。
CacheLoader<K, V>
显示可以通过编程方式配置不同的缓存:
只需将您的自定义缓存公开为bean。它们会自动添加到
CaffeineCacheManager
。
但是,使用LoadingCache<K, V>
(使用任意K
,V
, not <Object, Object>
)这样做似乎更困难。
This SO question似乎表明可以使用This SO question而不是SimpleCacheManager
进行操作-但是使用此解决方案要求CacheLoader
定义可用于{{ 1}} bean。首先,例如在昂贵的HTTP调用中,这很容易需要通过Cache
使用缓存注入服务。似乎也很容易出现依赖周期,但是如果不是这种情况,请纠正我。
定义与Spring的@Cacheable
一起使用的咖啡因LoadingCache<K, V>
的正确方法是什么?