Spring Boot支持kotlin data
课程 @ConfigurationProperties
.
@ConstructorBinding
@ConfigurationProperties(prefix = "prefix")
data class AppProperties (
val something: String
)
但是 val
以及 @ConstructorBinding
有一些局限性。不能将一个变量别名为另一个变量。假设您正在kubernetes中运行,并希望捕获由env var提供的主机名 HOSTNAME
. 最简单的方法就是申请 @Value("\${HOSTNAME}:)"
但它只适用于可变属性,并且没有构造函数绑定。
spring boot github问题跟踪者说:
住手!!请询问有关如何使用spring引导标记在堆栈溢出上使用某些东西的问题,或者理解为什么某些东西不能像您期望的那样工作。
那么,这是一个已知的限制,还是我应该为他们创建一个票据来修复它?
编辑:打开https://github.com/spring-projects/spring-boot/issues/25552
1条答案
按热度按时间toe950271#
@ConfigurationProperties
是替代@Value
而这两种设计并不是为了一起使用。它可以与javabean风格的绑定一起工作,但这是偶然的,而不是设计的,因此不应该依赖它。而不是使用
@Value
使某物通过@ConfigurationProperties
,建议您通过其他方式进行。例如,你可以使用这个答案中建议的方法之一,马可斯·巴贝罗在对你的问题的评论中提到了这个方法。或者,您可以从文档中的这个示例中获得一些灵感,并在中使用占位符application.properties
:另一种选择是通过
META-INF/spring.factories
实现EnvironmentPostProcessor
这增加了PropertySource
以设置所需的别名。就目前而言,如果您想在可重用库中执行某些操作,这可能是最好的方法。有一个开放的问题,以消除一些仪式,目前涉及。