首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quarkus:用Postgres属性的空值覆盖DEV配置文件配置

Quarkus:用Postgres属性的空值覆盖DEV配置文件配置
EN

Stack Overflow用户
提问于 2022-03-04 16:30:08
回答 2查看 394关注 0票数 1

我在Postgres (quarkus-jdbc-postgresql)中使用Quarkus (2.7.3 using )。

我非常喜欢Quarkus的方法,如果您没有为您的数据源配置任何usernamepasswordurl,那么当您在发展模式中启动应用程序时,它将尝试启动一个测试容器并模拟数据库。

因此,例如,如果在application.yml (或application.properties)中定义了这一点,Quarkus将在使用./mvnw clean quarkus:dev启动应用程序时为您启动一个Postgres测试容器

代码语言:javascript
复制
quarkus:
  datasource:
    username:
    password:
    db-kind: postgresql
    jdbc:
      driver: org.postgresql.Driver
      url:

日志上写着"Dev Services for the default datasource (postgresql) started.“非常整洁!:-)

但是,我真正想要的是在我的application.yml中定义真正的/生产性的数据库连接设置。然后在application-dev.yml中覆盖它们,以便只在开发模式下启动测试容器:

  • 具有application.yml PROD设置的
代码语言:javascript
复制
    quarkus:
      datasource:
        username: myuser
        password: mypassword
        db-kind: postgresql
        jdbc:
          driver: org.postgresql.Driver
          url: jdbc:postgresql://hostname:5432/mydb
  • 具有application-dev.yml DEV设置的
代码语言:javascript
复制
    quarkus:
      datasource:
        username:
        password:
        jdbc:
          url:

但是用null值覆盖属性不起作用,当我以开发模式启动应用程序时,会得到以下错误:

代码语言:javascript
复制
Datasource '<default>': Connection to hostname:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

覆盖本身起作用,如果我将application-dev.yml更改为使用嵌入式H2而不是隐式测试容器,则应用程序将启动:

  • 具有application-dev.yml设置的H2:
代码语言:javascript
复制
    quarkus:
      datasource:
        username: sa
        password: mypassword
        db-kind: h2
        jdbc:
          driver: org.h2.Driver
          url: jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1

因此,我的问题是:如何用null值覆盖数据源配置,以便Quarkus在dev模式下使用测试容器?

顺便说一句,从application.yml切换到Quarkus默认的application.properties是没有帮助的。

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-11 10:48:43

为了完成这一点:使用prod配置文件将前面的答案和评论结合起来--这是我的解决方案:

  • 具有application.yml DEV设置的
代码语言:javascript
复制
    quarkus:
      datasource:
        username:
        password:
        db-kind: postgresql
        jdbc:
          driver: org.postgresql.Driver
          url:
  • 具有application-prod.yml PROD设置的
代码语言:javascript
复制
    quarkus:
      datasource:
        username: myuser
        password: mypassword
        jdbc:
          url: jdbc:postgresql://hostname:5432/mydb

这样就不需要application-dev.yml了。谢谢各位!-)

票数 1
EN

Stack Overflow用户

发布于 2022-03-04 23:05:43

夸库斯的官方文件之后,

如果配置文件未为特定属性定义值,则使用默认(无配置文件)值。

这种行为在许多情况下都是有用的,但在您的情况下,一旦在默认配置文件中定义了属性,就无法覆盖到它们的空状态。

我建议您围绕配置文件交换配置文件,即将空值dev配置视为默认配置,并在覆盖配置文件中提供有意义的非空prod值。

如果您担心dev值可能会意外地在prod环境中使用,请记住,默认情况下,如果未告知其他信息,则为配置文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71354355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档