您可以使用spring-cloud-starter-config starter pom 依赖项以一种更清洁且值得信赖的方式完成此操作,并避免重新发明轮子。我已经用过很多次了,可以保证它的作用就像魅力一样。
依赖是:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-vault-config</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
用法:您必须在application.properties 文件中声明您希望从vault 映射值的所有属性(假设这些是默认值)。
然后你必须声明一个带有@VaultPropertySource 注释的弹簧Configuration,如下所示:
@Configuration
@Profile("prod")
@VaultPropertySource(
value = {
"secret/${spring.application.name}/spring.mail.username",
"secret/${spring.application.name}/spring.mail.password",
})
public class VaultConfig {
@Bean
@ConditionalOnProperty("spring.cloud.vault.enabled")
public VaultTemplate vaultTemplate(
@Value("${spring.cloud.vault.host:localhost}") final String host,
@Value("${spring.cloud.vault.port:8200}") final String port,
@Value("${spring.cloud.vault.scheme:https}") final String scheme,
SessionManager sessionManager) {
VaultEndpoint vaultEndpoint = VaultEndpoint.create(host, Integer.valueOf(port));
vaultEndpoint.setScheme(scheme);
return new VaultTemplateExtension(
vaultEndpoint, new HttpComponentsClientHttpRequestFactory(), sessionManager);
}
}
注意:
我使用@Profile 注释只是为了说明如何仅针对配置文件进行配置。
vaultTemplate 方法从指定的属性或用冒号分隔的默认值接收它的 valut 服务器配置值。
您可以使用@ConditionalOnProperty 决定何时启用属性到vault 秘密映射。
就是这样。现在您的道具具有保险库中的值。您可以看到它将值填充到属性中的干净程度。
只有一件事要确保,您需要在@VaultPropertySource 的value 属性中指定从保管库接收值的属性。