[英]Why is Spring @ConstructorBinding not binding for Kotlin @ConfigurationProperties class?
[英]@ConstructorBinding with immutable properties don't work with @Value in Spring Boot Kotlin @ConfigurationProperties
Spring 引導支持@ConfigurationProperties
的 Kotlin data
類。
@ConstructorBinding
@ConfigurationProperties(prefix = "prefix")
data class AppProperties (
val something: String
)
但是val
和@ConstructorBinding
有一些限制。 您不能將一個變量別名為另一個變量。 假設您在 Kubernetes 中運行,並且想要捕獲由 env var HOSTNAME
給出的主機名。 最簡單的方法是將@Value("\${HOSTNAME}:)"
應用於屬性,但它僅適用於可變屬性並且沒有構造函數綁定。
Spring 引導 GitHub 問題跟蹤器說:
停止,請詢問有關如何使用某些東西的問題。 或者要了解為什么某些東西沒有按預期工作,請在 Stack Overflow 上使用 spring-boot 標簽。
那么,這是一個已知的限制,還是我應該為他們創建一張票來修復它?
編輯:打開https://github.com/spring-projects/spring-boot/issues/25552
@ConfigurationProperties
是@Value
的替代品,兩者並非設計為一起使用。 它可以與 JavaBean 樣式的綁定一起使用,但這只是偶然而不是設計使然,因此不應依賴它。
建議您通過其他方式這樣做,而不是使用@Value
對通過@ConfigurationProperties
綁定的內容進行別名。 例如,您可以使用 Marcos Barbero 在對您的問題的評論中鏈接到的這個答案中建議的方法之一。 或者,您可以從文檔中的此示例中獲取一些靈感,並在application.properties
中使用占位符:
prefix.something=${hostname}
另一種選擇是通過META-INF/spring.factories
注冊EnvironmentPostProcessor
的實現,它將PropertySource
添加到環境中以設置所需的別名。 目前,如果您想在可重用的庫中做某事,這可能是最好的方法。 有一個未解決的問題要刪除當前涉及的一些儀式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.