Kotlin
我在我的项目中解决了同样的问题。但它也适用于 Java。
问题
我想在 yaml 配置中指定保管库路径,所以我最终得到了以下解决方案,它允许您bootstrap.yml
使用清晰的语法直接指定路径,如:
spring:
cloud:
vault:
paths: "secret/your-app"
解决方案:
- 在你的项目中创建
VaultConfig
类,内容如下:
package com.your.app.configuration
import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.cloud.vault.config.VaultConfigurer
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration
@ConditionalOnProperty(
prefix = "spring.cloud.vault", value = ["paths"],
matchIfMissing = false
)
class VaultConfig {
@Value("\${spring.cloud.vault.paths}")
private lateinit var paths: List<String>
@Bean
fun configurer(): VaultConfigurer {
return VaultConfigurer { configurer ->
paths.forEach {
configurer.add(it)
}
configurer.registerDefaultGenericSecretBackends(false)
configurer.registerDefaultDiscoveredSecretBackends(false)
}
}
}
- 使用内容创建
spring.factories
文件src/main/resources/META-INF/spring.factories
:
org.springframework.cloud.bootstrap.BootstrapConfiguration=com.your.app.configuration.VaultConfig
不要忘记指定对您的配置的有效引用,而不是
com.your.app.configuration.VaultConfig
spring.factories
允许您的 VaultConfig
如文档所述,在引导上下文中发生。
- 现在您可以在 中指定所需的路径
bootstrap.yml
,如下所示:
spring:
cloud:
vault:
paths:
- "secret/application"
- "secret/your-app"
它应该工作。