在容器启动之前覆盖 Quarkus Http 属性

发布时间:2021-02-26 07:52

我正在寻找一些方法来在容器启动之前覆盖系统配置属性。这是我的用例: 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)
    }
回答1