以前はPlayで!v1で構成変数を定義しapplication.conf
、次のようにアクセスするのは本当に簡単でした。
play.configuration("db.driver")
ただし、v2または適切な代替手段で同様に使用するためのドキュメントには何も見つかりません。そうするための方法は何ですか?
以前はPlayで!v1で構成変数を定義しapplication.conf
、次のようにアクセスするのは本当に簡単でした。
play.configuration("db.driver")
ただし、v2または適切な代替手段で同様に使用するためのドキュメントには何も見つかりません。そうするための方法は何ですか?
回答:
Play 2.5以降、play.api.Play.current
は非推奨になりました。依存性注入を使用してEnvironment
orを注入し、それConfiguration
を使用して構成値を読み取る必要があります。
class HomeController @Inject() (configuration: play.api.Configuration) extends Controller {
def config = Action {
Ok(configuration.underlying.getString("db.driver"))
}
}
詳細については、Playのドキュメントをご覧ください。
これに相当するPlay2.0Scalaは次のようになります。
Play.current.configuration.getString("db.driver")
あなたも必要になります import play.api.Play
このための完全なドキュメントはここにあります。
play.api.Play.maybeApplication.map(_.configuration.getString("db.driver"))
Play 2.0に適用-Javaコントローラーでは、以下を使用できます。
String optionValue = Play.application().configuration().getString("db.driver");
ビューで変数を取得するには、次を使用します。
@play.Play.application().configuration().getString("db.driver")
では、Java用のプレイ2.3.2を使用できcom.typesafe.config.ConfigFactory
オプション:
Config conf = ConfigFactory.load();
String myFooBarConfiguration = conf.getString("foo.bar");
動きの速いAPI!
アプリケーション.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を検査します。
Play 2.1では、Scalaまず最初に import play.api.Play
Play.current.configuration.getString("varibale name")
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
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がすでに言及した純粋なソリューションを回避することでした。
@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
...
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()
テストクラスでは?
GuiceApplicationBuilder
デフォルトのバインディングをオーバーライドする機会が与えられます。それ以外は、既存のPlayコンポーネントが期待どおりにインスタンス化されます。
他の人が述べているように、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
誰かがより良い答えを提案しますか?
//2.5.x以降の新しいアプローチ
import javax.inject.Inject
import play.api.Configuration
class Example @Inject() (playconfiguration: Configuration) {
def index() = {
val confString: String = playconfiguration.getString("confKey").get
}
}
ソース:https: //www.webkj.com/play-framework/play-scala-2.5-reading-config-using-di