本文介紹了測試容器的Quarkus環境變量問題的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
使用測試容器開發集成測試。在Applation.Properties文件中有幾個字段作為環境變量(例如:作為quarkus.datasource.username=${SER_DB_USERNAME:postgres}
傳遞)。
通過測試容器設置環境字段時
GenericContainer<?> someService = new GenericContainer<>(img)
.withEnv("SER_DB_USERNAME", DataLayer.DB_USERNAME)
正在使用測試容器成功獲取此值,但
對于以下環境變量,
app.security.enabled=${SER_SEC_ENABLE:true}
在應用程序屬性文件中定義
@IfBuildProperty(name = "app.security.enabled", stringValue = "true")
使用-DSER_SEC_ENABLED=TRUE通過命令提示符設置環境變量,但當嘗試在測試容器中傳遞相同的值時,環境變量始終為空。
GenericContainer<?> someService = new GenericContainer<>(img)
.withEnv("SER_SEC_ENABLE", "true")
推薦答案
在沒有更多項目上下文的情況下,我至少可以觀察到,app.security.enabled
是一個構建屬性,而不是運行時屬性,因此它可能已經在構建時進行了計算。如果使用已構建的映像/應用程序啟動容器,則環境變量很可能不起作用。
此外,使用-D
標志在JVM上設置屬性不會產生環境變量,這明確地是JVM上的系統屬性。
這篇關于測試容器的Quarkus環境變量問題的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,