如何按需重新加载 com.google.common.base.Supplier 中的值

问题描述 投票:0回答:2

我在一项服务中定义了如下供应商。该供应商从数据库加载一些值。

private final Supplier<Map<CustomClass1, CustomClass2>> sampleSupplier = Suppliers.memoizeWithExpiration(getSampleSupplier(), 1, TimeUnit.DAYS);

我想根据需要重新加载该供应商中的值,以便如果数据库在持续时间(1 天)内更新,这些值将被重新加载到供应商中。有什么办法可以实现这个目标吗?

java caching java-8
2个回答
0
投票

我不认为这是可以通过记忆来实现的,你需要一个缓存而不是番石榴。它具有显式使密钥无效的方法。因此,您需要一个数据库触发器/侦听器来捕获某些条目更改时的事件以及何时发生调用:

 Cache.invalidate(key)

然后

cache.put(key, value)

0
投票

也许您可以通过重新分配来取消供应商的范围?

pattern = Suppliers.memoize(() -> { return 1; });

pattern.get() == 1
pattern.get() == 1
pattern.get() == 1

pattern = Suppliers.memoize(() -> { return 2; });

pattern.get() == 2
pattern.get() == 2
© www.soinside.com 2019 - 2024. All rights reserved.