您可以使用spring-cloud-starter-config
启动程序依赖项以更加清晰和可信地执行此操作,并避免重复造轮子。我经常使用它并保证它能够完美运行。
依赖项是:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-vault-config</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
使用方法:您必须在application.properties
文件中声明所有要从vault
映射值的属性(假设这些是默认值)。
然后,您必须声明一个带有@VaultPropertySource
注释的Spring 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
密钥映射的属性。
就这样。现在您的props已经有了从保险库获取的值。您可以看到它如何清洁地将值填充到属性中。
唯一需要确保的是,您需要在@VaultPropertySource
的value
属性中指定从vault中接收值的属性。