Play框架:在生产模式下使用h2数据库进行开发和postgresql,以及如何通过conf文件连接到postgresql

问题描述

我有以下prod.conf,其中包含有关如何连接到我的Postgressql DB的相关信息。

slick.dbs.default {
  profile = "slick.jdbc.PostgresProfile$"
  db.dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
  db.numThreads = 8
  maxConnections = 8
  driver="slick.jdbc.PostgresProfile$"
  db.driver="org.postgresql.Driver"
  url="jdbc:postgresql://db:5432/db"
  user="user"
  password="password"
}

(摘录)

我的Dockerfile看起来像这样

#...
RUN sbt stage

RUN cd target/universal/stage/bin

ENTRYPOINT ["target/universal/stage/bin/newsapi","-dplay.http.secret.key=KEY -Dconfig.resource=prod.conf"]

(摘录)

有了-Dconfig.resource=prod.conf,应用程序应该开始使用prod.conf而不是application.conf,对吧?

但是在部署应用程序时,它仍然使用h2数据库,该数据库不是prod.conf的一部分,而是在application.conf中进行配置。

我没有收到任何警告,提示找不到{/ {1}} /无法加载{db1},或者无法建立与数据库的连接。

什么是解决此问题的正确方法,我的db-url是否正确?

作为上下文,postgresql db和docker-play应用程序一样作为docker映像运行。 Bot在同一个网络中。

解决方法

-Dconfig.resource标志需要传递给JVM,但是您将其传递给应用程序。

如果您使用的是sbt-native-packager(Play默认使用),则应该可以通过在-J前缀之前将标志传递给JVM。因此,您需要通过-J-Dconfig.resource=prod.conf

以下是相关文档: https://www.scala-sbt.org/sbt-native-packager/archetypes/java_app/customize.html#via-build-sbt

顺便说一下,还有一个sbt-native-packager的Docker插件。 https://www.scala-sbt.org/sbt-native-packager/formats/docker.html 我建议您使用它,而不是手动编写Dockerfile。