【问题标题】:How to set a environment variable for a quarkus property with hyphen?如何使用连字符为 quarkus 属性设置环境变量?
【发布时间】:2021-08-22 01:50:46
【问题描述】:

为带有连字符的属性设置环境变量时,例如:

quarkus.datasource.db-kind=postgresql

我希望它被设置为:

export QUARKUS_DATASOURCE_DB_KIND=postgresql

但是,这会导致以下消息:

Unrecognized configuration key "quarkus.datasource.db.kind" was provided; it will be ignored;

所有其他属性(不带连字符)均正确传递。

其他属性也会发生这种情况:

export QUARKUS_DATASOURCE_JDBC_MIN_SIZE=10
export QUARKUS_DATASOURCE_JDBC_INITIAL_SIZE=20
export QUARKUS_DATASOURCE_JDBC_MAX_SIZE=1000
...
Unrecognized configuration key "quarkus.datasource.jdbc.max.size" was provided;
Unrecognized configuration key "quarkus.datasource.jdbc.min.size" was provided;
Unrecognized configuration key "quarkus.datasource.jdbc.initial.size" was provided;

解决方法: 重命名环境变量并将它们传递到 application.properties,使用连字符名称:

quarkus.datasource.jdbc.initial-size=${DATASOURCE_JDBC_INITIAL_SIZE}
quarkus.datasource.jdbc.min-size=${DATASOURCE_JDBC_MIN_SIZE}
quarkus.datasource.jdbc.max-size=${DATASOURCE_JDBC_MAX_SIZE}

什么是正确的转换?它是否记录在某处?

【问题讨论】:

  • 你是在构建时还是运行时设置这个?

标签: quarkus smallrye


【解决方案1】:

尝试用下划线替换连字符。尽管有警告消息,它在我的情况下仍然有效。

application.yml

quarkus:
   swagger-ui:
     enable: false

码头运行

$ docker run -d -e QUARKUS_SWAGGER_UI_ENABLE=true -p 8080:8080 sample.com/foo
__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2021-06-09T05:34:55.192Z WARN  [io.qua.config] Unrecognized configuration key "quarkus.swagger.ui.enable" was provided; it will be ignored; verify that the dependency extension for this configuration is set or that you did not make a typo
2021-06-09T05:35:12.947Z INFO  [sam.com.access-log] 192.168.113.42 - - "GET /q/openapi HTTP/1.1" 200 14464 -

【讨论】:

    【解决方案2】:

    我认为大多数 shell 认为连字符是无效的标识符。根据 quarkus 的运行方式(CLI?),您可以执行类似的操作

    env "QUARKUS_DATASOURCE_DB-KIND=postgresql" quarkus
    

    这对环境变量如何转换为配置键做出了一些假设。根据您提供的信息,它看起来像转换为小写并将_ 替换为.?谁知道它会对连字符做什么

    【讨论】:

      【解决方案3】:

      Quarkus 遵循 MicroProfile 的命名约定:

      完全匹配(即 com.ACME.size)

      将每个既不是字母数字也不是 _ 的字符替换为 _(即 com_ACME_size)

      用 _ 替换每个既不是字母数字也不是 _ 的字符;然后>将名称转换为大写(即 COM_ACME_SIZE)

      因此 QUARKUS_DATASOURCE_DB_KIND 是正确的,但该属性是仅构建时间的属性,如 https://quarkus.io/guides/all-config#quarkus-datasource_quarkus.datasource.db-kind 上的锁定图标所示

      因此,您需要在构建时设置它才能生效。

      也就是说,错误消息不是很好,如果您可以确认您正在尝试将其设置为运行时而不是构建时间,那么请根据您的上下文打开问题并建议改进错误消息以突出显示它是或可能是仅构建时间属性。

      【讨论】:

      • 该属性是为整个外壳、构建和运行时设置的...也许有办法检查所有配置属性的实际运行时值是多少...
      • 设置初始池大小、最大大小、最小大小、初始大小也会产生相同的警告:``` 2021-09-27 18:16:14,783 WARN [io.qua.config] ( main) 提供了无法识别的配置键“quarkus.datasource.jdbc.min.size”;它将被忽略;验证是否设置了此配置的依赖扩展或者您没有打错 ``` 设置的环境变量是: - QUARKUS_DATASOURCE_JDBC_INITIAL_SIZE 根据quarkus.io/guides/datasource#jdbc-configuration,它们可以在运行时设置。
      猜你喜欢
      • 2019-09-11
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2020-02-14
      • 2016-02-04
      • 2012-06-05
      相关资源
      最近更新 更多