在 Kotlin/Quarkus 中讀取應用程式屬性在測驗類中正確作業(列印將寫入application.properties檔案中定義的值):
@QuarkusTest
class Test {
@ConfigProperty(name = "test.env")
val testEnv: String? = null
@Test
fun test(){
println(testEnv)
}
}
但是當我創建一個專用的配置類并嘗試從該類訪問成員時,該值始終為 null(而不是 中定義的application.properties):
class Config{
@ConfigProperty(name = "test.env")
val foo: String? = null
}
嘗試在測驗類中訪問此值(但該值始終為空):
@QuarkusTest
class Test {
@Test
fun test(){
println(Config().foo)
}
}
夸克版本: 1.10.3.Final
我究竟做錯了什么?
uj5u.com熱心網友回復:
該@ConfigProperty注釋實際上是一個CDI限定符。在 Quarkus 中,如果一個欄位用限定符注釋,則不必對其進行注釋@Inject——但它被視為已注釋。
所以你的測驗類相當于:
@QuarkusTest
class Test {
@Inject
@ConfigProperty(name = "test.env")
val testEnv: String? = null
@Test
fun test(){
println(testEnv)
}
}
現在,另一個重要的事情是,如果可能,Quarkus 測驗框架將測驗類視為 CDI bean。即測驗類由CDI容器實體化,執行依賴注入。testEnv人口就是這樣。
你如何實作同樣的目標?
- 通過添加定義注釋的 bean 使您的類成為 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)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312843.html
下一篇:確定Flow何時不回傳任何資料
