springboot应用程序中的Vault配置

时间:2018-03-18 09:15:25

标签: spring spring-boot spring-security hashicorp-vault

我正在使用springboot处理micorservice。我这里有三个问题。任何/所有人的答案都非常感谢。谢谢提前

背景:我们需要在应用程序启动期间从保险库中读取一些密钥,并将其保存在变量中供以后使用(以避免在保险库上点击)。此值将有TTL,因此应用程序应刷新并在保管库中配置新值时进行。

Q1:如何加载并确保值只加载一次(即保险库只被命中一次) Q2:如何在发生变化时获取新值 问题3:如何在本地测试。

1 个答案:

答案 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-happenHow does Guava expire entries in its CacheBuilder?以正确配置)。

您可能需要设置最大缓存大小以限制内存消耗。有关详细信息,请参阅documentation