Playにアクセス!application.confの2.0構成変数?


81

以前はPlayで!v1で構成変数を定義しapplication.conf、次のようにアクセスするのは本当に簡単でした。

play.configuration("db.driver")

ただし、v2または適切な代替手段で同様に使用するためのドキュメントには何も見つかりません。そうするための方法は何ですか?


1
新規訪問者の場合、この質問はPlay2.0に限定されません。以下の他のプレイバージョンについては、他にも複数の回答があります。
saurabheights 2017年

回答:


36

Play 2.5以降、play.api.Play.currentは非推奨になりました。依存性注入を使用してEnvironmentorを注入し、それConfigurationを使用して構成値を読み取る必要があります。

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

詳細については、Playのドキュメントをご覧ください。


5
更新された回答を提供していただきありがとうございます。これをPlayの将来のユーザーのための正解としてマークします!2.x
crockpotveggies 2016年

1
おかげで、これはPlayが再び変更されるまでうまくいくはずです。
カールス2017年

では、これをテストクラスで機能させる方法は?例:Spces2?
ラプ

115

これに相当するPlay2.0Scalaは次のようになります。

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

あなたも必要になります import play.api.Play

このための完全なドキュメントはここにあります


多くの感謝と私はリンクに感謝します。うまくいけば、APIエクスプローラーの外のScalaホームにもっと多くのドキュメントが表示されます:)
crockpotveggies 2012年

15
場合によっては、アプリケーションがまだ開始されていない、またはコードのこの部分までアプリケーションが必要ないと想定できないことに注意してください。あなたが使うかもしれないplay.api.Play.maybeApplication.map(_.configuration.getString("db.driver"))
Andy Petrella 2012年

6
これはPlay2.5で非推奨になりました。移行ガイドを
Breavyn 2016

57

Play 2.0に適用-Javaコントローラーでは、以下を使用できます。

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

ビューで変数を取得するには、次を使用します。

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

1
どうすればJavaScriptに使用できますか?
premraj 2014

1
@premraj非表示のdivのHTML5データ属性として共有してください。

22

では、Java用のプレイ2.3.2を使用できcom.typesafe.config.ConfigFactoryオプション:

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

動きの速いAPI!


これは、DIを使用しない現在のバージョンのPlayの正解です。
toidiu 2016

このソリューションは、Playバージョンから独立しています。Scalaでも動作します。そのアクセスポイントを変更する場合は、HOCONのバージョンに依存する可能性があります。
Patrick Sauts 2017年

6

アプリケーション.confから値にアクセスするためにPlay2.3 [.8] / Javaでテストされた別のメソッド:

Playのバージョンを確認するには、ファイルproject / pluginsを調べます。「sbt-plugin」を含む行には、「2.3.8」のようなバージョン仕様が必要です。

たとえば、application.confに次の行が含まれている場合

myConfigStringValue=abc
myConfigBooleanValue=true

次のようなJavaファイル/クラスからその値をクエリできます。

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

値が見つからない場合、get ...メソッドはnullを返します。また、デフォルト値を引数として取るget ...メソッドもあります。

詳細については、https://www.playframework.com/documentation/2.3.x/api/java/index.htmlを参照してください

クラスplay.Configurationを検査します。


5

Play Scala 2.3.xおよび2.4.xでは、から値を読み取るためにconf/application.conf、次の操作を実行できます。

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

4

Play 2.0.1 Javaでは、次のことを行う必要があります。

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


3

play> 2.5.XのJavaでは、ConfigFactoryヘルパーを介して構成値を読み取ることができます。

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

または

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

オブジェクトConfigは、パラメータを正しいタイプに変換します。これは、任意のJavaタイプ(getDouble、getLongなど)を処理するためのメソッドを公開します。

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


2

Play Scalaを使用している場合、いくつかのベストプラクティスを検索した後、このアプローチが最も適切であることがわかりました。そのために、構成を挿入してから、次のように構成キーにアクセスしました。

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'

主な目標は、Noneの場合に特定の例外をスローしながらget@ peoplemergeがすでに言及した純粋なソリューションを回避することでした


2

@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
   ...

1

Scalaを使用してPlayの構成にアクセスする方法は複数あります

以下はPlay2.7.xで動作します

オプション1:DIあり

import play.api.Configuration
.... other imports ...

class MyActor @Inject()(config: Configuration) extends Actor  {
 println(config.get[String]("akka_actor_custom_dispatcher"))
 println(config.get[String]("akka_actor_custom_dispatcher")) // w/o optional
 println(config.getOptional[Int]("value_1").getOrElse(2))    // with optional 
 .....
 }

オプション2:DIなし

import play.api.Configuration
.... other imports ...

class MyActor() extends Actor {
 val config = new Configuration(ConfigFactory.load("application.conf")) // application.conf is optional 
 println(config.get[String]("akka_actor_custom_dispatcher"))
 println(config.get[String]("akka_actor_custom_dispatcher")) // w/o optional
 println(config.getOptional[Int]("value_1").getOrElse(2))    // with optional 
 .....
 }

どのように@Inject()テストクラスでは?
ラプト

私が見服用を示唆している@rapt playframework.com/documentation/2.8.x/...を。基本的に、テスト中に使用されるPlayアプリケーションをオーバーライドする必要があります。これを行うと、GuiceApplicationBuilderデフォルトのバインディングをオーバーライドする機会が与えられます。それ以外は、既存のPlayコンポーネントが期待どおりにインスタンス化されます。
ニックジェイコブス

0

他の人が述べているように、play.api.Play.currentをインポートする必要があります。次に、実行した場合:

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

2.3.x / scala 10では、

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

これが必須の場合、これは機能します。

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

誰かがより良い答えを提案しますか?


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.