java - 是否可以调整 Caffeine LoadingCache 以与 Spring Boot 的 @Cacheable 一起使用?
问题描述
我正在开发一个大型 Spring Boot 2.1.5.RELEASE 应用程序,使用 Caffeine 作为缓存提供程序。为了防止 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 的自动配置。类型的 Bean CaffeineCache
(Spring 的Caffeine的缓存适配器模式Cache<K,V>
)是自动注册的,但是适配器强制我将其<Object, Object>
用作 my 的泛型类型CacheLoader<K, V>
。我只想将其作为最后的手段。
这个 SO question表明可以以编程方式配置不同的缓存:
只需将您的自定义缓存公开为 bean。它们会自动添加到
CaffeineCacheManager
.
但是,使用LoadingCache<K, V>
(使用任意K
, V
, not <Object, Object>
)执行此操作似乎更难。
这个 SO question似乎表明使用 aSimpleCacheManager
而不是 aCaffeineCacheManager
是可能的 - 但是使用这个解决方案需要CacheLoader
定义对Cache
bean 可用。这可能很容易首先需要使用缓存注入服务@Cacheable
,例如在昂贵的 HTTP 调用的情况下。这似乎也是一个容易产生依赖循环的解决方案,但如果不是这种情况,请纠正我。
问题
LoadingCache<K, V>
定义用于 Spring 的Caffeine 的正确方法是@Cacheable
什么?
解决方案
推荐阅读
- c# - 两因素身份验证无效代码始终
- java - ParseObject 数组可以容纳的对象数量是否有限制?
- speech-recognition - 使用 Javascript 和 Java websockets 实时(近)Watson Speech to text 用于麦克风音频字节转录
- java - 如何通过类名识别元素并使用 Selenium 和 Java 点击它?
- excel - 如何在 Excel 中格式化以逗号分隔的多个日期值?
- ios - ReactNative 0.59.8 项目 - 在应用商店发布时无法为 iOS 存档
- css - 将单个子元素与弹性容器的底部对齐
- python - 在表格的每一行旁边添加按钮
- assembly - 汇编器消息 -> 错误:寄存器编号超出范围
- javascript - 将新图像添加到列表后防止重新渲染整个图像列表