我在一项服务中定义了如下供应商。该供应商从数据库加载一些值。
private final Supplier<Map<CustomClass1, CustomClass2>> sampleSupplier = Suppliers.memoizeWithExpiration(getSampleSupplier(), 1, TimeUnit.DAYS);
我想根据需要重新加载该供应商中的值,以便如果数据库在持续时间(1 天)内更新,这些值将被重新加载到供应商中。有什么办法可以实现这个目标吗?
我不认为这是可以通过记忆来实现的,你需要一个缓存而不是番石榴。它具有显式使密钥无效的方法。因此,您需要一个数据库触发器/侦听器来捕获某些条目更改时的事件以及何时发生调用:
Cache.invalidate(key)
然后
cache.put(key, value)
也许您可以通过重新分配来取消供应商的范围?
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