Quarkus:用 Postgres 属性的空值覆盖 DEV 配置文件配置
Quarkus: Overwrite DEV profile config with empty values for Postgres properties
我正在使用 Quarkus (2.7.3.Final) 和 Postgres (quarkus-jdbc-postgresql
)。
而且我真的很喜欢 Quarkus 的方法,如果您没有为数据源配置 username
、password
和 url
,它将尝试启动一个测试容器并模拟数据库,当您在 development mode.
中启动应用程序
因此,例如,如果您在 application.yml
(或 application.properties
)中定义它,当您使用 ./mvnw clean quarkus:dev
启动应用程序时,Quarkus 将为您启动一个 Postgres 测试容器:
quarkus:
datasource:
username:
password:
db-kind: postgresql
jdbc:
driver: org.postgresql.Driver
url:
日志显示“Dev Services for the default datasource (postgresql) started.
”
挺整洁的! :-)
然而,我真正想要的是在 application.yml
中定义我的 real/productive 数据库连接设置。然后在application-dev.yml
中覆盖它们,这样只有在开发模式下才会启动testcontainer:
application.yml
与 PROD 设置:
quarkus:
datasource:
username: myuser
password: mypassword
db-kind: postgresql
jdbc:
driver: org.postgresql.Driver
url: jdbc:postgresql://hostname:5432/mydb
application-dev.yml
DEV 设置:
quarkus:
datasource:
username:
password:
jdbc:
url:
但是用 null
值覆盖属性不起作用,当我在开发模式下启动应用程序时出现错误:
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 设置:
quarkus:
datasource:
username: sa
password: mypassword
db-kind: h2
jdbc:
driver: org.h2.Driver
url: jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1
所以我的问题是:如何用空值覆盖我的数据源配置,以便 Quarkus 在开发模式下使用测试容器?
顺便说一下,不幸的是,从 application.yml
切换到 Quarkus 默认值 application.properties
没有帮助。
非常感谢!
正在关注 Quarkus' official documentation、
If a profile does not define a value for a specific attribute, the
default (no profile) value is used
此行为在很多情况下都很有用,但在您的情况下可能会导致无法覆盖在默认配置文件中定义的属性返回到空状态。
我建议您交换配置文件,即将 null-valued dev
配置视为默认配置,并在覆盖配置文件中提供有意义的 non-null prod
值。
如果您担心 dev
值可能会在 prod
环境中以这种方式意外使用,请记住 Quarkus is going to use prod
profile by default if not told otherwise.
只是为了完成这个:结合以前的答案和评论使用 prod 配置文件这是我的解决方案:
application.yml
DEV 设置:
quarkus:
datasource:
username:
password:
db-kind: postgresql
jdbc:
driver: org.postgresql.Driver
url:
application-prod.yml
与 PROD 设置:
quarkus:
datasource:
username: myuser
password: mypassword
jdbc:
url: jdbc:postgresql://hostname:5432/mydb
这样就不需要application-dev.yml
了。谢谢大家! :-)
我正在使用 Quarkus (2.7.3.Final) 和 Postgres (quarkus-jdbc-postgresql
)。
而且我真的很喜欢 Quarkus 的方法,如果您没有为数据源配置 username
、password
和 url
,它将尝试启动一个测试容器并模拟数据库,当您在 development mode.
因此,例如,如果您在 application.yml
(或 application.properties
)中定义它,当您使用 ./mvnw clean quarkus:dev
启动应用程序时,Quarkus 将为您启动一个 Postgres 测试容器:
quarkus:
datasource:
username:
password:
db-kind: postgresql
jdbc:
driver: org.postgresql.Driver
url:
日志显示“Dev Services for the default datasource (postgresql) started.
”
挺整洁的! :-)
然而,我真正想要的是在 application.yml
中定义我的 real/productive 数据库连接设置。然后在application-dev.yml
中覆盖它们,这样只有在开发模式下才会启动testcontainer:
application.yml
与 PROD 设置:
quarkus:
datasource:
username: myuser
password: mypassword
db-kind: postgresql
jdbc:
driver: org.postgresql.Driver
url: jdbc:postgresql://hostname:5432/mydb
application-dev.yml
DEV 设置:
quarkus:
datasource:
username:
password:
jdbc:
url:
但是用 null
值覆盖属性不起作用,当我在开发模式下启动应用程序时出现错误:
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 设置:
quarkus:
datasource:
username: sa
password: mypassword
db-kind: h2
jdbc:
driver: org.h2.Driver
url: jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1
所以我的问题是:如何用空值覆盖我的数据源配置,以便 Quarkus 在开发模式下使用测试容器?
顺便说一下,不幸的是,从 application.yml
切换到 Quarkus 默认值 application.properties
没有帮助。
非常感谢!
正在关注 Quarkus' official documentation、
If a profile does not define a value for a specific attribute, the default (no profile) value is used
此行为在很多情况下都很有用,但在您的情况下可能会导致无法覆盖在默认配置文件中定义的属性返回到空状态。
我建议您交换配置文件,即将 null-valued dev
配置视为默认配置,并在覆盖配置文件中提供有意义的 non-null prod
值。
如果您担心 dev
值可能会在 prod
环境中以这种方式意外使用,请记住 Quarkus is going to use prod
profile by default if not told otherwise.
只是为了完成这个:结合以前的答案和评论使用 prod 配置文件这是我的解决方案:
application.yml
DEV 设置:
quarkus:
datasource:
username:
password:
db-kind: postgresql
jdbc:
driver: org.postgresql.Driver
url:
application-prod.yml
与 PROD 设置:
quarkus:
datasource:
username: myuser
password: mypassword
jdbc:
url: jdbc:postgresql://hostname:5432/mydb
这样就不需要application-dev.yml
了。谢谢大家! :-)