Java 如何根据需要在com.google.common.base.Supplier中重新加载值

Java 如何根据需要在com.google.common.base.Supplier中重新加载值,java,caching,java-8,Java,Caching,Java 8,我在其中一项服务中有一个定义如下的供应商。此供应商从数据库加载一些值 private final Supplier<Map<CustomClass1, CustomClass2>> sampleSupplier = Suppliers.memoizeWithExpiration(getSampleSupplier(), 1, TimeUnit.DAYS); private final Supplier sampleSupplier=Suppliers.memoizewi

我在其中一项服务中有一个定义如下的供应商。此供应商从数据库加载一些值

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

我希望按需重新加载此供应商中的值,以便在持续时间(1天)内更新数据库时,将这些值重新加载到供应商中。我有什么办法可以做到这一点吗?

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

 Cache.invalidate(key)
然后

cache.put(key, value)

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

 Cache.invalidate(key)
然后

cache.put(key, value)

sampleSupplier
标记为volatile并用新实例替换。将
sampleSupplier
标记为volatile并用新实例替换。