2012-03-25 71 views
78

以前在玩! V1這是很容易在application.conf定義配置變量,然後訪問它們像這樣:訪問玩! application.conf中的2.0配置變量?

play.configuration("db.driver") 

但是現在我找不到在v2或合適的替代類似用途的文檔中任何事情。這樣做的方法是什麼?

+0

對於新來訪者來說,這個問題不限於Play 2.0。其他多個播放版本的其他多個答案已在下面進行。 – saurabheights 2017-03-31 14:58:10

回答

31

截至Play 2.5,play.api.Play.current已棄用。你應該使用依賴注入注入EnvironmentConfiguration並用它來讀取配置值:

class HomeController @Inject() (configuration: play.api.Configuration) extends Controller { 
    def config = Action { 
    Ok(configuration.underlying.getString("db.driver")) 
    } 
} 

結帳的Play documentation進行更詳細的討論。

+5

感謝您提供更新的答案。我將把這標記爲Play的未來用戶的正確答案! 2.x – crockpotveggies 2016-05-09 19:23:42

+1

謝謝,這應該很好,直到Play再次更改。 – Karlth 2017-05-14 14:38:31

113

的播放2.0斯卡拉相當於這將是:

Play.current.configuration.getString("db.driver") 

您還需要import play.api.Play

這個完整的文檔是here

+0

非常感謝,我欣賞鏈接。希望我們可以在API瀏覽器之外的Scala主頁中看到更多文檔:) – crockpotveggies 2012-03-25 05:23:08

+15

請注意,根據情況,您無法假定應用程序尚未啓動,或者您不需要應用程序,直到這部分代碼;你可以使用'play.api.Play.maybeApplication.map(_。configuration.getString(「db.driver」))' – 2012-03-26 04:18:32

+6

這現在在Play 2.5中已經被棄用了。請參閱[遷移指南](https://www.playframework.com/documentation/2.5.x/Migration25#Deprecated-play.Play-and-play.api.Play-methods) – Breavyn 2016-04-02 00:55:16

57

適用於播放2.0 - 在的Java控制器您可以使用下面:

String optionValue = Play.application().configuration().getString("db.driver"); 

要獲得變量鑑於使用這樣的:

@play.Play.application().configuration().getString("db.driver") 
+1

如何將它用於JavaScript ? – Premraj 2014-04-28 09:57:42

+1

@premraj使用共享它作爲不可見div的HTML5數據屬性。 – Josef 2015-04-11 00:09:08

4

在玩2.0.1的Java,你需要這樣做:

import play.Application.*; 
... 
String optionValue = play.Play.application().configuration().getString("my.config"); 
3

在玩2.1,斯卡拉 首先你必須import play.api.Play Play.current.configuration.getString("varibale name")

21

玩2.3.2的Java你可以使用com.typesafe.config.ConfigFactory選項:

Config conf = ConfigFactory.load(); 
String myFooBarConfiguration = conf.getString("foo.bar"); 

快速移動的API!

+0

這是當前版本Play的正確答案...不使用DI。 – toidiu 2016-09-06 06:38:48

+0

此解決方案獨立於Play版本。它也適用於Scala。如果他們想改變那個接入點,可能依賴於HOCON版本。 – 2017-05-17 23:30:56

5

在播放斯卡拉2.3.x版本2.4.x的和,從conf/application.conf讀取值,你可以做到以下幾點:

import play.api.Play.current 
... 
current.configuration.getString("db.driver") 
0

正如其他人所說,你需要導入play.api.Play。當前。然後,如果你運行:

current.configuration.getString("db.driver") 

在2.3.x版本/ 10階,你會得到

type mismatch; 
found : Option[String] 
required: String 

如果這是強制性的,這將工作:

url = current.configuration.getString("db.driver").get 

任何建議更好回答?

6

測試的另一種方法播放2.3 [0.8]/Java的從application.conf訪問值:

要檢查遊戲版本,請檢查該文件的項目/插件。包含「sbt-plugin」的行應該有「2.3.8」之類的版本規範。

例如,如果應用程序。CONF包含線

myConfigStringValue=abc 
myConfigBooleanValue=true 

一個可以查詢,從一個java文件/類值一樣

import play.Configuration; 
... 
String myString = Configuration.root().getString("myConfigStringValue"); 
Boolean myBoolean = Configuration.root().getBoolean("myConfigBooleanValue"); 

的get ...方法返回null如果未找到值,也有得到。 ..採用默認值作爲參數的方法。

詳見 https://www.playframework.com/documentation/2.3.x/api/java/index.html

,並檢查類play.Configuration。

2

如果你正在使用玩斯卡拉,我發現這種方法是最合適的搜索一些最佳做法後。要做到這一點,我注入配置,然後訪問像這樣我的配置重點:

import play.api.Configuration 

class myClass @Inject()(
    config: Configuration 
) { 
    val configValue: String = config.underlying.getString("configKey") 
} 

這樣,你沒有得到的選項,但是字符串。如果它沒有,它拋出一個異常:

Error injecting constructor, com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'configKey' 

主要目的是爲了避免如果沒有拋出時的特定異常@peoplemerge已經提到的純get解決方案。

0

作爲對此處所有@Inject答案的小貢獻/改進,您無需致電config.underlying實施。您可以直接使用config.getString

例如:

@Singleton 
class RESTSessionChecker @Inject()(
    implicit override val conf: Configuration) 
    extends Filter { 

    val MAX_CONCURRENT_REQUESTS = conf.getString("MAX_CONCURRENT_REQUESTS"). 
     getOrElse("100").toInt 
    ... 
2

在Java中與遊戲> 2.5.X你可以通過ConfigFactory幫手讀取配置值:

ConfigFactory.load().getString("redis.url") 

ConfigFactory.load().getInt("redis.port") 

對象配置 wil我將param轉換爲正確的類型。它暴露的方法來處理任何Java類型(getDouble,getLong,等等等等)

文件: https://www.playframework.com/documentation/2.5.0/api/java/play/Configuration.html

+1

簡單並避免在所有控制器中注入值... – cyril 2017-12-01 12:13:16