2

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

我将客户的基本 uri 设置为application.dev.yml

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.

这非常令人沮丧,但我确信我错过了一个让这一切正常工作的关键部分。

4

2 回答 2

2

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

你可能想要application-dev.yml.

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

您可以@Client使用类似@Client("${myserviceclient.baseUri}").

于 2019-11-29T16:28:41.007 回答
0

如果您希望代码中某处的 url 使用这个:

@Value("${micronaut.http.services.occupancy.urls}")
private String occupancyUrl;
于 2020-12-28T14:46:49.037 回答