2012-03-23 52 views
52

我想將一個對象添加到全局範圍,爲了構建它,我需要將它傳遞給一個文件的路徑。 我不想在源代碼中對文件路徑進行硬編碼,因此我想從application.conf中獲取該路徑。使用Play訪問java類中的application.conf屬性! 2.0

問題是我不知道如何從java類訪問這些屬性。 我嘗試這樣做:

Configuration.root().getString("file.path") 

但它與NullPointerException異常結束。

我錯了,假設有一個全局配置實例,我可以使用? 謝謝。

回答

79

嘗試Play.application().configuration().getString("your.key")

正如評論(nico_ekito)指出,請用play.Play,而不是play.api.Playplay.api.Play適用於scala控制器(請參閱Marcus biesior Biesioroff的評論)

此外,play使用https://github.com/typesafehub/config,因此它也可以提供一些見解。

+0

謝謝,這確實起作用。 – 2012-03-24 10:17:50

+5

'Play.application()'不再存在:/ – 2012-06-25 13:20:41

+5

要小心導入,你使用'play.Play'而不是'play.api.Play'嗎?作爲Cyril N提到的 – 2012-06-25 13:33:02

48

即使看似簡單,這裏是斯卡拉方式來獲得配置文件屬性:

播放2.0和2.1

import play.api.Play.current 
... 
Play.application.configuration.getString("your.key") 

播放2.2 +

import play.api.Play.current 
... 
current.configuration.getString("your.key") 

使用類型安全配置

import com.typesafe.config.ConfigFactory 
... 
ConfigFactory.load().getString("your.key"); 
+0

謝謝,我使用java雖然不是scala – 2012-05-10 12:37:14

+1

爲什麼你不能使用'current'? – cdmckay 2013-08-06 05:59:36

+1

'Play.current.configuration.getString(「your.key」)'似乎是Play 2.2.2的方式 – 2014-04-24 06:39:33

12

由於播放2使用類型安全的配置庫,我訪問我的增值經銷商在application.conf這樣的:

ConfigFactory.load().getString("my.var"); 
+1

是的!這種變體比其他變種更好。它也在濾鏡中工作(在Global對象初始化之前)。 – 2014-07-30 19:32:21

+6

請注意,這將加載默認配置文件,但如果您在Global中加載了其他文件(例如,application.dev.conf),則不會將其考慮在內。發現困難的方法:( – redent84 2014-12-17 14:23:54

1

作爲參考,從模板訪問它(爲玩< 2)

play.configuration['your.key'] 
2

使用如下(經測試,在播放1.2.5)

${play.configuration.getProperty('my.var')} 

其中my.var應application.conf文件

+0

我正在尋找+1 – gabby 2015-01-12 23:29:13

+0

正是我一直在尋找+1 – 2016-02-08 11:19:55

3

在劇中的java指定爲:

import play.Play; 
... 
Play.application().configuration().getString("key") 
1

至於有人提到,Play.application.configuration不再存在。

In Play Scala 2.3。X,來讀取conf/application.conf一個值,你可以做到以下幾點:

import play.api.Play.current 
... 
current.configuration.getString("key") 
33

Play 2.4 and +這是更好地使用依賴注入來訪問配置:

import play.Configuration; 
import javax.inject.Inject; 


@Inject 
private Configuration configuration; 

... 

String value = configuration.getString("your.key"); 
+1

由於Play 2.6.0配置已被棄用,您需要注入com.typesafe.config.Config來代替。 – Spen 2017-09-27 09:53:54

0

在玩1.2.x版本

import play.Play; 
... 


String version = Play.configuration.getProperty("application.version.number", "1.1.1"); 

其中第二個參數是默認值

0

導入此

import com.typesafe.config.Config; 

和寫入以下行

private Config config; 
this.config = ConfigProvider.config(); 
String value = this.config.getString("fieldFromConfigFile");