【问题标题】:Inject RxHttpClient in Micronaut with url coming from an environment variable使用来自环境变量的 url 在 Micronaut 中注入 RxHttpClient
【发布时间】:2021-03-20 20:08:42
【问题描述】:

当我在 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')}

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

【问题讨论】:

    标签: groovy micronaut


    【解决方案1】:

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

    除了这些PropertySourceLoaders 之外,PropertySources 是从环境变量中解析出来的,并按照属性源键语法自动注入并可在ApplicationContext 中使用:

    SOME_ENVIRONMENT_VARIABLE 转换为 some.environment.variable

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-22
        • 1970-01-01
        • 2018-06-26
        • 2021-03-04
        相关资源
        最近更新 更多