问题描述
我有以下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},或者无法建立与数据库的连接。
作为上下文,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。