[英]Why is Spring @ConstructorBinding not binding for Kotlin @ConfigurationProperties class?
[英]Kotlin @ConstructorBinding @ConfigurationProperties class for multiple instances
我遇到了一個問題,我找不到任何好的解決方案。 一些背景:我們使用幾個微服務,其中大多數使用 rest 客戶端。 我們發現他們中的很多人會使用類似的配置來解決類似的問題(即彈性)。 自然,我們希望將常見的、大量重復的、非業務代碼提取到庫中。 但事情是這樣的:如何在庫中提取@ConstructorBinding
@ConfigurationProperties
數據 class (特別是如果在使用該庫的代碼庫中可能有這些類的多個實例)?
這是一些示例代碼:
@ConstructorBinding
@ConfigurationProperties(prefix = "rest.client")
data class MyDuplicatedRestClientProperties(
val host: String,
val someOtherField: Int,
val someFieldWithDefaultValue: String = "default value"
)
我想在一個項目中導入它來配置 2 個不同的 REST 客戶端。 我試過了:
ClientProperties
將擴展。 可悲的是,我需要公開父 class 的所有字段,這對復制沒有幫助:abstract class MyAbstractClient(
val host: String,
val someOtherField: Int,
val someFieldWithDefaultValue: String = "default value"
)
@ConstructorBinding
@ConfigurationProperties(prefix = "rest.client")
class MyImplematationClient(
val host: String,
val someOtherField: Int,
val someFieldWithDefaultValue: String = "default value"
): MyAbstractClient(
host,
someOtherField,
someFieldWithDefaultValue
)
@ConfigurationProperties
將屬性實例化為@Bean
方法,但這也不能很好地工作,因為它迫使我將帶有@Value
的字段放在@Configuration
class 中:@Configuration
class MyConfigurationClass {
@Value("${my.client.host}")
lateinit var host: String
@Value("${my.client.someOtherField}")
lateinit var someOtherField: Int
@Value("${my.client.someFieldWithDefaultValue:default value}")
lateinit var someFieldWithDefaultValue: String
@Bean
@ConfigurationProperties
fun myClient() = MyDuplicatedRestClientProperties(
host,
someOtherField,
someFieldWithDefaultValue
)
}
根據我的經驗,你走錯了路。 為什么?
Spring Beans
的接口.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.