使用来自环境变量的 url 在 Micronaut 中注入 RxHttpClient

Inject RxHttpClient in Micronaut with url coming from an environment variable

当我在 micronaut 中注入 RxHttpClient 时,我有一个 url 带有我想从环境变量中获取的令牌以避免对秘密进行硬编码。

在我的服务中,我是这样注入客户端的:

@Client('${System.getenv(\'BOT_URL\')}')
@Inject
RxHttpClient httpClient

作为 BOT_URL 我的 url 存储在环境变量中。 项目构建但在尝试使用客户端时失败并出现此错误:

2021-03-20 20:05:14.37 Could not resolve placeholder ${System.getenv('BOT_KEY')}

我的变量在服务器中定义正确,我如何在注入客户端时访问它?

您应该能够仅使用 ${BOT_URL} 访问环境变量。我知道这在 application.yml 文件中有效。如果它在注释中不起作用,您始终可以使用环境变量的值在 application.yml 中创建一个 属性,并在注释中使用 属性。

有关这方面的文档,请尝试 micronaut docs 的“属性 值绑定”部分。

Micronaut 附带预制的 PropertySourceLoaders,可以解析来自不同来源的 PropertySources。您可以通过文档阅读有关 externalized configuration 的更多信息。

除了这些 PropertySourceLoaders,PropertySources 是从环境变量中解析出来的,并且自动注入并可在 ApplicationContext 中使用,遵循 属性 源密钥语法:

SOME_ENVIRONMENT_VARIABLE 转换为 some.environment.variable

因此,您可以简单地以声明方式注入您的 HttpClient,并将环境变量键转换为点分隔的-属性-键语法:

@Client('${bot.url}')
@Inject
RxHttpClient httpClient