【问题标题】:Micronaut declarative client with base url per environmentMicronaut 声明式客户端,每个环境具有基本 URL
【发布时间】:2019-11-27 22:27:15
【问题描述】:

我希望能够使用 Micronaut 的声明式客户端根据我是在本地开发环境还是生产环境中访问不同的端点。

我在application.dev.yml中设置了我客户的基本URI:

myserviceclient:
  baseUri: http://localhost:1080/endpoint

阅读来自 Micronaut 的文档,他们让开发人员跳过了很多圈,以将动态值输入到实际客户端中。他们实际上很混乱。所以我创建了这样的配置:

@ConfigurationProperties(PREFIX)
class MyServiceClientConfig {

  companion object {
    const val PREFIX = "myserviceclient"
    const val BASE_URL = "http://localhost:1080/endpoint"
  }

  var baseUri: String? = null

  fun toMap(): MutableMap<String, Any> {
    val m = HashMap<String, Any>()
    if (baseUri != null) {
      m["baseUri"] = baseUri!!
    }

    return m
  }
}

但是正如你所看到的,这实际上并没有从application.yml 中读取任何值,它只是将一个 const 值设置为类的静态值。我希望 BASE_URL 值根据我所处的环境是动态的。

为了使用这个类,我创建了一个这样的声明式客户端:

@Client(MyServiceClientConfig.BASE_URL)
interface MyServiceClient {

  @Post("/user/kfc")
  @Produces("application/json")
  fun sendUserKfc(transactionDto: TransactionDto)
}

文档显示了一个示例,他们从这样构建的配置映射中插入值:

@Get("/api/\${bintray.apiversion}/repos/\${bintray.organization}/\${bintray.repository}/packages") 

但是我如何在 @Client() 注释中进行这项工作?

在该示例中,它们没有显示bintray 是如何被定义/注入/等的。这似乎与 @Value() 注释使用的语法相同。我也尝试过使用它,但我尝试使用的每个值最终都是null

这非常令人沮丧,但我确信我错过了让这一切顺利进行的关键部分。

【问题讨论】:

    标签: kotlin micronaut micronaut-client


    【解决方案1】:

    我在 application.dev.yml 中设置我客户的基本 uri

    你可能想要application-dev.yml

    但是如何在 @Client() 注释中进行这项工作?

    您可以使用@Client("${myserviceclient.baseUri}") 之类的方式将配置键放入@Client 值中。

    【讨论】:

    • 是的。我的build.gradle 也需要run { systemProperty('micronaut.environments','dev') }。添加后,我可以使用 @Client("\${myserviceclient.baseUri}") (由于 Kotlin 的字符串插值,需要反斜杠)。谢谢!
    • 仅供参考...系统属性并不是真正需要的,但这是一种方法。比如你也可以设置MICRONAUT_ENVIRONMENTS操作系统环境变量,效果一样。
    【解决方案2】:

    如果你想在代码中的某个地方使用这个网址:

    @Value("${micronaut.http.services.occupancy.urls}")
    private String occupancyUrl;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多