我在Postgres (quarkus-jdbc-postgresql)中使用Quarkus (2.7.3 using )。
我非常喜欢Quarkus的方法,如果您没有为您的数据源配置任何username、password和url,那么当您在发展模式中启动应用程序时,它将尝试启动一个测试容器并模拟数据库。
因此,例如,如果在application.yml (或application.properties)中定义了这一点,Quarkus将在使用./mvnw clean quarkus:dev启动应用程序时为您启动一个Postgres测试容器
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设置的: quarkus:
datasource:
username: myuser
password: mypassword
db-kind: postgresql
jdbc:
driver: org.postgresql.Driver
url: jdbc:postgresql://hostname:5432/mydbapplication-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因此,我的问题是:如何用null值覆盖数据源配置,以便Quarkus在dev模式下使用测试容器?
顺便说一句,从application.yml切换到Quarkus默认的application.properties是没有帮助的。
非常感谢!
发布于 2022-03-11 10:48:43
为了完成这一点:使用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了。谢谢各位!-)
发布于 2022-03-04 23:05:43
继夸库斯的官方文件之后,
如果配置文件未为特定属性定义值,则使用默认(无配置文件)值。
这种行为在许多情况下都是有用的,但在您的情况下,一旦在默认配置文件中定义了属性,就无法覆盖到它们的空状态。
我建议您围绕配置文件交换配置文件,即将空值dev配置视为默认配置,并在覆盖配置文件中提供有意义的非空prod值。
如果您担心dev值可能会意外地在prod环境中使用,请记住,默认情况下,如果未告知其他信息,则为配置文件。
https://stackoverflow.com/questions/71354355
复制相似问题