Java 在加载缓存刷新时调用方法
我有一个客户机,通过令牌提供对其API的访问。它们不是OAuth代币。只需一个简单的http get请求即可获取令牌。此令牌确实过期,我们可以在此之前刷新以获取新令牌。我正在考虑使用GoogleLoadingCache实现这一点,如果不为null,则获取令牌,否则作为请求发布到客户端以获取令牌。但当值为null时,会发生这种情况。(第一次)之后,我只需要在它过期之前定期刷新。在这里使用加载缓存有意义吗?或者有没有其他方法来实现这一点? 如果它这样做了,这就是我正在考虑的方法——我希望它调用一个函数/方法来刷新令牌。我不确定重载load方法是否仅在其为null或每次必须刷新/过期时才会被调用。缓存过期/刷新时是否会清空?我可以使用上一个令牌刷新令牌。所以我需要缓存中的值来发送请求。这就是我的想法Java 在加载缓存刷新时调用方法,java,guava,Java,Guava,我有一个客户机,通过令牌提供对其API的访问。它们不是OAuth代币。只需一个简单的http get请求即可获取令牌。此令牌确实过期,我们可以在此之前刷新以获取新令牌。我正在考虑使用GoogleLoadingCache实现这一点,如果不为null,则获取令牌,否则作为请求发布到客户端以获取令牌。但当值为null时,会发生这种情况。(第一次)之后,我只需要在它过期之前定期刷新。在这里使用加载缓存有意义吗?或者有没有其他方法来实现这一点? 如果它这样做了,这就是我正在考虑的方法——我希望它调用一个函
private static LoadingCache<String, Optional<String>> cache = CacheBuilder.newBuilder()
.build(new CacheLoader<String, Optional<String>>() {
@Override
public Optional<String> load(String key) throws Exception {
return Optional.fromNullable(refreshToken(key));
}
});
private static LoadingCache cache=CacheBuilder.newBuilder()
.build(新的缓存加载程序(){
@凌驾
公共可选加载(字符串键)引发异常{
返回可选的.fromNullable(refreshtToken(key));
}
});
我想我需要知道缓存过期时是否会调用相同的load方法?是,如果调用
LoadingCache.get()
,它将调用load()
方法。但是,缓存的值不会自动过期-您必须手动删除它们(例如,通过Cache.invalidate()
)或通过CacheBuilder
例如,如果您知道令牌在10分钟后过期,您可以使用expireAfterWrite(9,TimeUnit.MINUTES)
(9分钟给您一些缓冲时间,您可以选择不同的时间量)
另一方面,如果您只是通过发出请求并拒绝它来发现令牌已过期,那么您可能希望在请求失败后手动使条目无效。然后对.get()
的下一次调用将调用.load()
,然后返回一个新令牌