Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin Micronaut声明性客户端,每个环境具有基本url_Kotlin_Micronaut_Micronaut Client - Fatal编程技术网

Kotlin Micronaut声明性客户端,每个环境具有基本url

Kotlin Micronaut声明性客户端,每个环境具有基本url,kotlin,micronaut,micronaut-client,Kotlin,Micronaut,Micronaut Client,我希望能够使用Micronaut的声明性客户端,根据我是在本地开发环境还是在生产环境中,找到不同的端点 我正在application.dev.yml中设置客户端的基本uri: myserviceclient: baseUri: http://localhost:1080/endpoint 在阅读Micronaut的文档时,他们让开发人员跨越了许多障碍,以获得一个动态值,并通过管道传输到实际的客户机中。事实上,他们很困惑。因此,我创建了如下配置: @ConfigurationProperti

我希望能够使用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
  }
}
@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") 
这些文档显示了一个示例,其中它们从如下构建的配置映射中插值:

@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
  }
}
@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
是如何定义/注入的/etc。这似乎与
@Value()
注释使用的语法相同。我也尝试过使用它,但我尝试使用的每个值最终都是
null

这是非常令人沮丧的,但我肯定我错过了一个关键的部分,这将使所有的工作

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

您可能需要
application-dev.yml

但是如何在@Client()注释中实现这一点呢


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

的方法将配置键放入
@Client
值中,如果您希望url位于代码中的某个位置,请使用以下方法:

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

是的。在我的
build.gradle
中还需要
run{systemProperty('micronaut.environments','dev')}
。一旦我添加了它,我就可以使用
@Client(\${myserviceclient.baseUri}”)
(由于Kotlin的字符串插值,反斜杠是必需的)。非常感谢。仅供参考。。。实际上并不需要system属性,但这是一种方法。例如,您还可以设置
MICRONAUT_ENVIRONMENTS
操作系统环境变量,并具有相同的效果。