是否可以改编Caffeine LoadingCache以与Spring Boot的@Cacheable一起使用?

时间:2019-05-21 13:14:44

标签: java spring spring-boot caching caffeine

我正在使用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>(使用任意KV not <Object, Object>)这样做似乎更困难。

This SO question似乎表明可以使用This SO question而不是SimpleCacheManager进行操作-但是使用此解决方案要求CacheLoader定义可用于{{ 1}} bean。首先,例如在昂贵的HTTP调用中,这很容易需要通过Cache使用缓存注入服务。似乎也很容易出现依赖周期,但是如果不是这种情况,请纠正我。

问题

定义与Spring的@Cacheable一起使用的咖啡因LoadingCache<K, V>的正确方法是什么?

0 个答案:

没有答案