2014-02-18 85 views
1

我有一個自定義的數據庫配置文件,當我的Play項目打包成一場戰爭時,我想將其外化。Play 2 Framework的外部配置

build.sbt試圖javaOptions-DConfig.file java命令,但沒有檢測到我的文件...

我行:javaOptions in run += "-Dconfig.file=conf/database.conf"

和Tomcat服務器上部署我的戰爭:

(與其他依賴關係)

我把我的conf文件放在lib目錄下:/lib/conf/database.conf

我在哪裏做錯了?

(基於此鏈接:http://www.scala-sbt.org/0.12.3/docs/Detailed-Topics/Forking.html

回答

0

如果您部署在Tomcat的戰爭,我看不出SBT是如何參與,這可以解釋爲什麼你的選項被忽略。

遊戲並非真正意義上的戰爭。我認爲最簡單的事情是通過類型安全配置庫手動加載代碼中的配置文件。

+0

因此,jvm命令不能工作? Play2War插件是我用來生成我的戰爭,它已爆炸Jar函數,所以它會解決我的問題,但它不適用於我有的版本..而對於類型安全配置,這是我用來解析我的配置文件,它無法訪問它。 – Azuken

0

部署到容器時,您無法控制JVM進程,因此無法指定命令行選項來設置系統屬性。

這裏最簡單的方法可能只是將您的配置文件重命名爲reference.conf或application.conf。這兩個名稱由配置庫從類路徑自動加載。

如果您想保留一個單獨的文件,您還可以編輯reference.conf或application.conf以添加include "database.conf"

否則,您可以手動加載配置文件,例如用ConfigFactory.parseResource來搜索類路徑。

除了包含類路徑資源外,您還可以包含開箱即用的文件和網址。使用include url("http://example.com")include file("foo.conf")語法。手動(在代碼中)ConfigFactory當然也可以解析URL和文件。

如果這不夠靈活,還可以通過兩種方式自定義包含。

之一是創建一個自定義ConfigIncluder http://typesafehub.github.io/config/latest/api/com/typesafe/config/ConfigIncluder.html

另一種是在通常的Java方法來創建一個自定義URL協議,例如參見Creating custom URI scheme using URI classhttp://www.cooljeff.co.uk/2009/12/12/custom-url-protocols-and-multiple-classloaders/。然後使用包含url(「myproto:foobar」)

+0

是的,但它不能解決我的問題:終於用這種方法我的conf將在項目jar中,我不希望那.. – Azuken

+0

你可以包括(或解析)一個文件或URL,而不只是一個類路徑資源。 –