refreshAfterWrite 需要 spring 引导咖啡因应用程序中的 LoadingCache
refreshAfterWrite requires a LoadingCache in spring boot caffeine application
我正在尝试编写一个应用程序来缓存每隔几秒重新加载一次。我决定使用 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);
}
我们有一些简单的重新加载方法吗?
总而言之,将 Caffeine 的 LoadingCache
特性与 Spring 的缓存抽象结合使用没有多大意义,因为它们共享很多特性。
@Cacheable
通常提供一种方法来标记检索缓存中尚未存在的元素的方法。 LoadingCache
实现相同的场景,要求您提供一个可以通过 id 加载缺失元素的句柄。
如果您绝对需要使用 LoadingCache
,我会在您的代码中注入 Cache
并以编程方式与其交互。
我正在尝试编写一个应用程序来缓存每隔几秒重新加载一次。我决定使用 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);
}
我们有一些简单的重新加载方法吗?
总而言之,将 Caffeine 的 LoadingCache
特性与 Spring 的缓存抽象结合使用没有多大意义,因为它们共享很多特性。
@Cacheable
通常提供一种方法来标记检索缓存中尚未存在的元素的方法。 LoadingCache
实现相同的场景,要求您提供一个可以通过 id 加载缺失元素的句柄。
如果您绝对需要使用 LoadingCache
,我会在您的代码中注入 Cache
并以编程方式与其交互。