我正在使用springboot处理micorservice。我这里有三个问题。任何/所有人的答案都非常感谢。谢谢提前
背景:我们需要在应用程序启动期间从保险库中读取一些密钥,并将其保存在变量中供以后使用(以避免在保险库上点击)。此值将有TTL,因此应用程序应刷新并在保管库中配置新值时进行。
Q1:如何加载并确保值只加载一次(即保险库只被命中一次) Q2:如何在发生变化时获取新值 问题3:如何在本地测试。
答案 0 :(得分:0)
使用guava cache存储值(假设它们是字符串,但您可以将其更改为任何类型),如下所示:
LoadingCache<String, String> vaultData = CacheBuilder.newBuilder()
.expireAfterAccess(10, TimeUnit.MINUTES)
.build(
new CacheLoader<String, String>() {
public String load(String key) throws AnyException {
return actuallyLoadFromVault(String);
}
});
这样,当您的代码第一次从vaultData
读取某个密钥时,它将使用actuallLoadFromVault
(您需要编写原因)加载,之后通过vaultData
读取任何新密钥<ion-grid>
<ion-row>
<ion-col>
1 of 3
</ion-col>
<ion-col>
2 of 3
</ion-col>
<ion-col>
3 of 3
</ion-col>
</ion-row>
</ion-grid>
将点击存储在内存中的缓存值。
在10分钟后进行正确配置后,将从缓存中删除该值(请阅读https://github.com/google/guava/wiki/CachesExplained#when-does-cleanup-happen和How does Guava expire entries in its CacheBuilder?以正确配置)。
您可能需要设置最大缓存大小以限制内存消耗。有关详细信息,请参阅documentation。