Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在加载缓存刷新时调用方法_Java_Guava - Fatal编程技术网

Java 在加载缓存刷新时调用方法

Java 在加载缓存刷新时调用方法,java,guava,Java,Guava,我有一个客户机,通过令牌提供对其API的访问。它们不是OAuth代币。只需一个简单的http get请求即可获取令牌。此令牌确实过期,我们可以在此之前刷新以获取新令牌。我正在考虑使用GoogleLoadingCache实现这一点,如果不为null,则获取令牌,否则作为请求发布到客户端以获取令牌。但当值为null时,会发生这种情况。(第一次)之后,我只需要在它过期之前定期刷新。在这里使用加载缓存有意义吗?或者有没有其他方法来实现这一点? 如果它这样做了,这就是我正在考虑的方法——我希望它调用一个函

我有一个客户机,通过令牌提供对其API的访问。它们不是OAuth代币。只需一个简单的http get请求即可获取令牌。此令牌确实过期,我们可以在此之前刷新以获取新令牌。我正在考虑使用GoogleLoadingCache实现这一点,如果不为null,则获取令牌,否则作为请求发布到客户端以获取令牌。但当值为null时,会发生这种情况。(第一次)之后,我只需要在它过期之前定期刷新。在这里使用加载缓存有意义吗?或者有没有其他方法来实现这一点? 如果它这样做了,这就是我正在考虑的方法——我希望它调用一个函数/方法来刷新令牌。我不确定重载load方法是否仅在其为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()
,然后返回一个新令牌