对于我的Play 2.2/Scala应用程序(使用SBT构建),我希望根据部署到的环境部署不同的配置文件(例如,将部署与特定的数据库服务器耦合)。如何为不同的部署目标创建应用程序配置文件(conf/application.conf)的不同变体?希望变体可以从基础版本生成?
我在.NET中习惯的是有一个基本配置文件(Web.config),它会根据部署的配置文件(例如Production)进行一定的转换。在Play/Scala的世界里,有人使用类似的技术吗?
可选配置文件在Play文档的Specifying alternative configuration file
部分中有很好的介绍。
简而言之,在application.conf
中,您放置了应用程序的默认配置,此外,您还需要为您的环境创建额外的文件,即life.conf
、dev.conf
等。在这些文件中,您首先需要包括application.conf
(它将读取整个默认配置),然后只覆盖必须更改的部分,即DB凭据,它可能是dev.conf
:
include "application.conf"
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:alternative-database-for-dev-testing"
db.default.user=developer
db.default.password="developerpass"
所以最后你开始你的应用程序(在dist
之后)作为
./start -Dconfig.resource=dev.conf
或使用游戏控制台
play -Dconfig.resource=dev.conf run
几个提示:
- 最好不要将您的"生命"数据库凭据放在默认的
application.conf
文件中,如果有些开发人员忘记包含他的dev.conf
,他不会损坏生产数据库,而是应该将其放在prod.conf
中 - 此外,这些额外的配置不应该放在任何VCS(即git)存储库中——直接在目标机器上创建它们(并在存储库中忽略)可以确保,不知道生命数据库凭据的人不会看到它
- 也可以使用远程备用配置文件,这在您在云中的多个主机上部署同一应用程序的多个实例时非常有用
- 每个开发程序都可以有自己的配置文件,即
dev_aknuds1.conf
、dev_biesior.conf
等,因此您可以在repo中使用一个模式dev_*.conf
来忽略它们 - 最后,您只需创建一个shell脚本(unix)或bat文件(Windows),就可以开始使用
start_dev.sh
、run_dev.sh
等选择的配置文件,这样您就不需要每次都编写-Dconfig.resource=...