gpt4 book ai didi

java - 如何使用条目加载 Guava

转载 作者:行者123 更新时间:2023-12-02 03:48:39 25 4
gpt4 key购买 nike

我需要失败条目的缓存,我尝试使用以下语句构建它:

    failedJobCache =
CacheBuilder.newBuilder()
.maximumSize(100) // maximum 100 records can be cached
.expireAfterAccess(30, TimeUnit.MINUTES) // cache will expire after 30 minutes of access
.build(new CacheLoader<String, JobDto>() {
@Override
public JobDto load(String s) throws Exception {
JobDto found = failedJobCache.get(s);
if (found != null)
return found;
else
return null;
}
});

还有:

// add failed entries
failedJobCache.put(jobDto.getUniqueId(), jobDto);

// respective check before running the job if its
// already in the cache and should be skipped:
JobDto existing = failedJobCache.get(jobDto.getUniqueId());
if (existing != null) {
logger.debug("Nothing to do, job already processed!" + jobDto.getUniqueId());
return;
}

不幸的是我遇到了:

线程“main”com.google.common.util.concurrent.UncheckedExecutionException 中出现异常:java.lang.IllegalStateException:递归加载:...

问题如何仅将失败的条目添加到缓存中?

最佳答案

CacheLoader.load(K) 仅当不存在“给定键的已加载值”( CacheBuilder.build(LoadingCache) ) 时才会调用。

因此,请调用 LoadingCache.get(K) 来自CacheLoader.load(K)创建一个递归负载,如果允许执行,则会递归得太深,导致 StackOverflowError 被扔掉。

从您的示例中提供的信息来看,您似乎不需要 LoadingCache<K, V> 但只是一个 Cache<K, V> 。调用 CacheBuilder.build() 没有 CacheLoader<K, V> .

参见CachesExplained · google/guava Wiki了解更多详情。

关于java - 如何使用条目加载 Guava ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36080498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com