我正在寻找一些方法来在容器启动之前覆盖系统配置属性。这是我的用例:
1- 在启动 http 服务器之前,以编程方式检查证书是否存在于容器目录中。
2- 如果有证书,则设置属性:quarkus.http.ssl.certificate.key-store-file=/path/keystore
quarkus.http.ssl.certificate.key-store-password=PASS
quarkus.http.ssl-port
3- 否则以正常的 http 模式启动应用程序。
目前我正在尝试实现这样的目标(在 Kotlin 中):
@QuarkusMain
object Main {
@JvmStatic
fun main(args: Array<String>) {
Quarkus.run(App::class.java, *args)
}
class App : QuarkusApplication {
override fun run(vararg args: String): Int {
System.setProperty("quarkus.http.ssl-port", "8443")
System.setProperty("quarkus.http.ssl.certificate.key-store-file", "${path}keystore.p12")
System.setProperty("quarkus.http.ssl.certificate.key-store-password", KEY_STORE_PASS)
Quarkus.waitForExit()
return 0
}
}
}
这来自quarkus manual。但是,这并没有实现我的用例,应用程序不会覆盖参数。如果我在应用程序配置时的构建时提供此类参数,则 TLS 有效。
[EDIT]:这里遗漏了一个关键点,并设法通过在启动应用程序之前移动 main 中的 set 属性来解决它
@JvmStatic
fun main(args: Array<String>) {
System.setProperty("quarkus.http.ssl-port", "8443")
System.setProperty("quarkus.http.ssl.certificate.key-store-file", "${path}keystore.p12")
System.setProperty("quarkus.http.ssl.certificate.key-store-password", KEY_STORE_PASS)
Quarkus.run(App::class.java, *args)
}