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

Play Framework: use h2 database for development and postgresql in production mode and how to connect to the postgresql via conf-file

我有以下 prod.conf,包含有关如何连接到我的 PostgresSql 数据库的相关信息。

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,对吗?

但是当应用程序被部署时,它仍然使用不属于 prod.conf 并在 application.conf.

中配置的 h2 数据库

我没有收到任何关于 prod.conf 不能 found/loaded 或无法建立数据库连接的警告。

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

作为上下文,postgresql 数据库作为 docker 图像以及播放应用程序运行。机器人在同一个网络中。

需要将 -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 我建议您使用它而不是手动编写 Docker 文件。