2013-02-06 61 views
10

我正在使用playframework 2.1-RC2。首先我見過all thesimilarquestions,所以我遵循了每個環境下分離application.conf文件的常用指令。所以我application.test.conf,我運行測試是這樣的:取決於環境的Playframework設置

play -Dconfig.file=./conf/application.test.conf "test" 

我嘗試不同的組合,像

play -Dconfig.file=./conf/application.test.conf ~test 

play -Dconfig.file=conf/application.test.conf ~test 

仍然沒有運氣,它只是做沒有被選中,默認的一個(application.conf)是相反的。

從另一個方面,如果我做

play -Dconfig.file=./conf/application.dev.conf "run" 

然後應用挑選合適的配置。

那麼如何指定測試配置文件呢?

回答

13

我發現的最可靠的方法在跨平臺兼容的方式是直接在Build.scala包括它specifiy這樣:

val main = play.Project(appName, appVersion, appDependencies).settings(
    javaOptions in Test += "-Dconfig.file=conf/test.conf", 
    ... 
) 

獎勵:配置一次,忘了;-)

+0

你已經讓我的一天。但是如何通過控制檯執行同樣的操作不起作用? – zapadlo

+0

我不知道你運行的是哪個操作系統,但至少在Windows中有一個已知但低優先級的錯誤,該操作不會將參數傳遞給JVM正確(並且這是一個JVM參數,而不是播放參數)。 SBT做得更好;-) – Leo

+2

這是一個有趣的方法,但關鍵字「測試」來自哪裏?是否有可能對環境做同樣的事情,如dev/preprod/prod ...?謝謝 – c4k

1

另一種方法是覆蓋GlobalSettings/Global上的方法,該方法名爲onLoadConfig並且使您可以控制應用程序在哪裏查找您的配置。

因此,在我們的應用程序之一,我有這個設置下面我的conf /文件夾。

conf/application.conf --> configurations common for all environment 
conf/dev/application.conf --> configurations for development environment 
conf/test/application.conf --> configurations for testing environment 
conf/prod/application.conf --> configurations for production environment 

就這樣,你是能夠實現類似的設置進行配置繼承,你有常見的3人對特定的環境模式。

您onLoadConfig方法中的代碼應該只是加載主要的配置和具體設置正確的回退配置您的環境,然後返回配置實例如下圖所示:

**return new Configuration(baseConfig.withFallback(envConfig));** 

儘量檢查這blog post for complete snippet的代碼。

我希望這會有所幫助。