이전에 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 문서 를 확인 하세요 .
이에 상응하는 Play 2.0 Scala는 다음과 같습니다.
Play.current.configuration.getString("db.driver")
당신은 또한 필요합니다 import play.api.Play
이에 대한 전체 문서는 여기에 있습니다 .
play.api.Play.maybeApplication.map(_.configuration.getString("db.driver"))
Play 2.0에 적용-Java Controller에서 다음을 사용할 수 있습니다.
String optionValue = Play.application().configuration().getString("db.driver");
보기에서 변수를 얻으려면 다음을 사용하십시오.
@play.Play.application().configuration().getString("db.driver")
Java 용 Play 2.3.2 에서는 다음 com.typesafe.config.ConfigFactory
옵션을 사용할 수 있습니다 .
Config conf = ConfigFactory.load();
String myFooBarConfiguration = conf.getString("foo.bar");
빠르게 움직이는 API!
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을 검사합니다.
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 등)을 처리하는 메소드를 노출합니다.
문서 : 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'
주요 목표는 @peoplemerge가 이미 언급 한 순수한 get
솔루션 을 피하는 것이 었고 None 인 경우 특정 예외를 던지는 것입니다.
@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에서 구성에 액세스하는 방법에는 여러 가지가 있습니다.
다음은 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()
테스트 클래스?
GuiceApplicationBuilder
기본 바인딩을 재정의 할 수 있습니다. 그 외에는 기존 Play 구성 요소가 예상대로 인스턴스화됩니다.
// 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