此kotlin数据类是某些Quarkus微服务(Quarkus 2.0.0.Final(中使用的内部库的一部分:
@ApplicationScoped
data class FooConfiguration(
@ConfigProperty(name = "foo.bar")
val fooBar: String
)
该库在少数微服务中使用,并且大多数微服务都使用该配置。但有些不是。对于这些,foo.bar
属性没有在application.properties
中定义。我希望这根本不重要,因为这些服务从来没有注入FooConfiguration
,所以我希望永远不会构建它。
但是,应用程序拒绝启动,并显示以下错误消息:
SRCFG00014: The config property foo.bar is required but it could not be found in any config source
我知道如何解决这个问题(简单地提供一个无意义的值(,但我目前想知道为什么这是一个问题。永远不应该构造配置bean。为什么会发生这种情况?
这是一个与MicroProfile配置相关的问题。
您的foo.bar
属性是可选的,按照MicroProfile Config规范的说法,这不是必需的,因为它的值在任何配置源中都不存在,正如您所指出的。要为可选的MicroProfile Config配置属性注入值,需要使用java.util.Optional
。我不知道Kotlin,所以下面是它在Java中的样子:
@Inject
@ConfigProperty(name = "foo.bar")
private Optional<String> fooBar;