플레이 플레이! 2.0 application.conf의 구성 변수?


81

이전에 Play! v1에서는 구성 변수를 정의 application.conf하고 다음과 같이 액세스하는 것이 정말 쉬웠습니다 .

play.configuration("db.driver")

그러나 지금은 v2에서 비슷한 용도로 사용하거나 적절한 대안을 문서에서 찾을 수 없습니다. 그렇게하는 방법은 무엇입니까?


1
신규 방문자의 경우이 질문은 Play 2.0에만 국한되지 않습니다. 아래의 다른 플레이 버전에 대해 여러 다른 답변이 작성되었습니다.
saurabheights

답변:


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

1
감사합니다. Play가 다시 변경 될 때까지 잘 작동합니다.
Karlth

그렇다면 테스트 클래스에서이 작업을 수행하는 방법은 무엇입니까? 예 : Spces2?

115

이에 상응하는 Play 2.0 Scala는 다음과 같습니다.

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

당신은 또한 필요합니다 import play.api.Play

이에 대한 전체 문서는 여기에 있습니다 .


많은 감사와 링크에 감사드립니다. 희망 우리는 API 탐색기 : 외부 스칼라 집에서 더 많은 문서를 참조하십시오
crockpotveggies

15
경우에 따라 응용 프로그램이 아직 시작되지 않았거나 코드의이 부분까지 응용 프로그램이 필요하지 않다고 가정 할 수 없습니다. 당신은 사용할 수 있습니다play.api.Play.maybeApplication.map(_.configuration.getString("db.driver"))
앤디 Petrella에게

6
이것은 이제 Play 2.5에서 더 이상 사용되지 않습니다. 마이그레이션 가이드
Breavyn 2016

57

Play 2.0에 적용-Java Controller에서 다음을 사용할 수 있습니다.

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

보기에서 변수를 얻으려면 다음을 사용하십시오.

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

1
자바 스크립트에 어떻게 사용할 수 있습니까?
Premraj 2014

1
@premraj 사용하지 않는 div의 HTML5 데이터 속성으로 공유합니다.

22

Java 용 Play 2.3.2 에서는 다음 com.typesafe.config.ConfigFactory옵션을 사용할 수 있습니다 .

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

빠르게 움직이는 API!


DI를 사용하지 않은 현재 버전의 Play ...에 대한 정답입니다.
toidiu

이 솔루션은 Play 버전과 독립적입니다. Scala에서도 작동합니다. 해당 액세스 포인트를 변경하는 경우 HOCON 버전에 의존 할 수 있습니다.
Patrick Sauts 2017 년

6

Play 2.3 [.8] / Java 에서 테스트 한 또 다른 방법 은 application.conf의 값에 액세스합니다.

Play 버전을 확인하려면 프로젝트 / 플러그인 파일을 확인하십시오. "sbt-plugin"이 포함 된 줄에는 "2.3.8"과 같은 버전 사양이 있어야합니다.

예를 들어, application.conf에

myConfigStringValue=abc
myConfigBooleanValue=true

하나는 자바 파일 / 클래스에서 그 값을 쿼리 할 수 ​​있습니다.

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 등)을 처리하는 메소드를 노출합니다.

문서 : 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'

주요 목표는 @peoplemerge가 이미 언급 한 순수한 get솔루션 을 피하는 것이 었고 None 인 경우 특정 예외를 던지는 것입니다.


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에서 구성에 액세스하는 방법에는 여러 가지가 있습니다.

다음은 Play 2.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

@rapt 나는 한 번 봐 복용 제안 playframework.com/documentation/2.8.x/...을 . 기본적으로 테스트 중에 사용되는 Play 애플리케이션을 재정의해야합니다. 이렇게하면에서 GuiceApplicationBuilder기본 바인딩을 재정의 할 수 있습니다. 그 외에는 기존 Play 구성 요소가 예상대로 인스턴스화됩니다.
Nick Jacobs

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.