为什么 Quarkus 使用 @ConfigProperty 属性 抱怨我的(未使用的)@ApplicationScoped 数据 class?
Why does Quarkus complain about my (unused) @ApplicationScoped data class with a @ConfigProperty property?
此 kotlin 数据 class 是某些 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
属性 is optional, not required, in the parlance of the MicroProfile Config specification,因为它的值不存在于任何配置源中,如您所指出的。要为可选的 MicroProfile Config 配置 属性 注入值,您需要使用 java.util.Optional
。我不了解 Kotlin,所以这是 Java:
中的样子
@Inject
@ConfigProperty(name = "foo.bar")
private Optional<String> fooBar;
此 kotlin 数据 class 是某些 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
属性 is optional, not required, in the parlance of the MicroProfile Config specification,因为它的值不存在于任何配置源中,如您所指出的。要为可选的 MicroProfile Config 配置 属性 注入值,您需要使用 java.util.Optional
。我不了解 Kotlin,所以这是 Java:
@Inject
@ConfigProperty(name = "foo.bar")
private Optional<String> fooBar;