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