Java 如果禁用了Spring Vault配置,则返回到本地配置

Java 如果禁用了Spring Vault配置,则返回到本地配置,java,spring,spring-boot,spring-vault,spring-cloud-vault-config,Java,Spring,Spring Boot,Spring Vault,Spring Cloud Vault Config,对于开发环境,我配置了bootstrap.properties以禁用vault配置 spring.cloud.vault.enabled=false 如果禁用,则应用程序应从本地config application.properties文件中读取属性。但如何做到这一点呢 作为一种解决方法,我在application.properties中定义了本地属性,如下所示 xyz.db.user=${xyz.db.user.fromVault:test} xyz.db.password=${xyz.db

对于开发环境,我配置了
bootstrap.properties
以禁用vault配置

spring.cloud.vault.enabled=false
如果禁用,则应用程序应从本地config application.properties文件中读取属性。但如何做到这一点呢

作为一种解决方法,我在
application.properties
中定义了本地属性,如下所示

xyz.db.user=${xyz.db.user.fromVault:test}
xyz.db.password=${xyz.db.password.fromVault:test}
因此,应用程序首先检查是否在vault中配置了
xyz.db.user.fromVault
属性。如果没有,则将
xyz.db.user
设置为
test

但这感觉不是一个正确的方法,因为我需要维护多个属性。有什么正确的方法吗?

TL;博士 视情况而定

解释 为配置属性提供回退值通常是处理默认值的好方法。如果您只有两个,那么您可以使用这种方法

但是,有一个警告:

存储在Vault中的数据在某种程度上取决于环境,并且通常是敏感的(用户名、密码)。您不希望将这些内容存储在代码中,甚至不希望存储在属性文件中

可以有一个单独的特性文件(例如,由纵断面分隔),其中包含非Vault环境的值,但实际的问题是,为什么要提供默认值

如果您有一个需要凭据的远程数据库,您可能会问自己这样一个问题:如果这些凭据暴露给非预期的第三方,会造成多大的伤害?如果您的答案是:不多,那么将这些凭证存储在配置文件绑定的属性文件中就是一种方法。如果它很痛,那么我会看到两种选择:

  • 使用Vault(解决敏感数据的实际问题)
  • 使用另一种方法(例如内存中的数据库),从一开始就不需要凭据
  • 我发现了您的详细说明“spring.cloud.vault.enabled=false”,这使得禁用
    测试的技巧成为可能。但是,如果将此属性添加到
    应用程序测试.yml
    ,则无法使其正常工作,是否有一种方法可以在不使用您创建的示例方法的情况下为
    mvn测试目标禁用vault?