如何在专用 Kotlin 中读取 Quarkus Config Class
How to read Quarkus Config in dedicated Kotlin Class
读取 Kotlin/Quarkus 中的应用程序属性在测试中有效 class 喜欢这个正确(打印将写入 application.properties
文件中定义的值):
@QuarkusTest
class Test {
@ConfigProperty(name = "test.env")
val testEnv: String? = null
@Test
fun test(){
println(testEnv)
}
}
但是当我创建专用配置 class 并尝试从该 class 访问成员时,该值始终为 null(并且与 application.properties
中定义的不同):
class Config{
@ConfigProperty(name = "test.env")
val foo: String? = null
}
试图在测试中访问此值class(但该值始终为空):
@QuarkusTest
class Test {
@Test
fun test(){
println(Config().foo)
}
}
Quarkus 版本:1.10.3.Final
我做错了什么?
@ConfigProperty
注释实际上是一个 CDI 限定符。在 Quarkus 中,如果一个字段用限定符注释,则不必注释它 @Inject
-- 但它被视为好像是。
所以你的测试 class 等同于:
@QuarkusTest
class Test {
@Inject
@ConfigProperty(name = "test.env")
val testEnv: String? = null
@Test
fun test(){
println(testEnv)
}
}
现在,另一件重要的事情是,如果可能的话,Quarkus 测试框架将测试 class 视为 CDI bean。也就是说,测试class是由CDI容器实例化的,它执行依赖注入。这就是 testEnv
的填充方式。
你如何实现同样的目标?
- 通过添加 bean 定义注释.
使您的 class 成为一个 bean
@Singleton
class Config{
@ConfigProperty(name = "test.env")
val foo: String? = null
}
(请注意,在标准 CDI 中,@Singleton
不是 bean 定义注释。在 Quarkus 中,@Singleton
是 一个 bean 定义注释,但是如果如果你想严格遵守标准,你可以使用@ApplicationScoped
代替。)
- 不要通过调用构造函数实例化
Config
。相反,再次使用依赖注入:
@QuarkusTest
class Test {
@Inject
Config config;
@Test
fun test(){
println(config.foo)
}
}
读取 Kotlin/Quarkus 中的应用程序属性在测试中有效 class 喜欢这个正确(打印将写入 application.properties
文件中定义的值):
@QuarkusTest
class Test {
@ConfigProperty(name = "test.env")
val testEnv: String? = null
@Test
fun test(){
println(testEnv)
}
}
但是当我创建专用配置 class 并尝试从该 class 访问成员时,该值始终为 null(并且与 application.properties
中定义的不同):
class Config{
@ConfigProperty(name = "test.env")
val foo: String? = null
}
试图在测试中访问此值class(但该值始终为空):
@QuarkusTest
class Test {
@Test
fun test(){
println(Config().foo)
}
}
Quarkus 版本:1.10.3.Final
我做错了什么?
@ConfigProperty
注释实际上是一个 CDI 限定符。在 Quarkus 中,如果一个字段用限定符注释,则不必注释它 @Inject
-- 但它被视为好像是。
所以你的测试 class 等同于:
@QuarkusTest
class Test {
@Inject
@ConfigProperty(name = "test.env")
val testEnv: String? = null
@Test
fun test(){
println(testEnv)
}
}
现在,另一件重要的事情是,如果可能的话,Quarkus 测试框架将测试 class 视为 CDI bean。也就是说,测试class是由CDI容器实例化的,它执行依赖注入。这就是 testEnv
的填充方式。
你如何实现同样的目标?
- 通过添加 bean 定义注释. 使您的 class 成为一个 bean
@Singleton
class Config{
@ConfigProperty(name = "test.env")
val foo: String? = null
}
(请注意,在标准 CDI 中,@Singleton
不是 bean 定义注释。在 Quarkus 中,@Singleton
是 一个 bean 定义注释,但是如果如果你想严格遵守标准,你可以使用@ApplicationScoped
代替。)
- 不要通过调用构造函数实例化
Config
。相反,再次使用依赖注入:
@QuarkusTest
class Test {
@Inject
Config config;
@Test
fun test(){
println(config.foo)
}
}