refreshAfterWrite在春季启动咖啡因应用程序中需要LoadingCache

时间:2018-12-06 20:24:55

标签: spring-boot spring-cache caffeine

我正在尝试编写一个要每隔几秒钟重新加载一次的缓存应用程序。我决定使用Spring Boot Caffeine并获得一个示例应用程序。但是,当我指定refreshAfterWrite属性时,它将引发异常:refreshAfterWrite requires a LoadingCache

spring:
    cache:
        cache-names: instruments, directory
        caffeine:
            spec: maximumSize=500, expireAfterAccess=30s, refreshAfterWrite=30s

为解决此问题,我提供了“加载缓存Bean”,但缓存完全停止工作:

@Bean
    public CacheLoader<Object, Object> cacheLoader() {
        return string -> {
            System.out.println("string = " + string);
            return string;
        };
    }

    @Bean
    public LoadingCache<Object, Object> loader(CacheLoader<Object, Object> cacheLoader) {
        return Caffeine.newBuilder()
                .refreshAfterWrite(1, TimeUnit.SECONDS)
                .build(cacheLoader);
    }

我们有一些简单的方法可以重新加载工作吗?

1 个答案:

答案 0 :(得分:1)

在这里总结一下,将Caffeine的LoadingCache功能与Spring的缓存抽象一起使用没有太大意义,因为它们共享许多功能。

@Cacheable通常提供一种标记方法来检索缓存中尚不存在的元素的方法。 LoadingCache实现了相同的情况,要求您提供一个可以按ID加载缺少的元素的句柄。

如果您绝对需要使用LoadingCache,我会在您的代码中插入Cache并以编程方式与其交互。