/ / Scala - play2 config секция - скала, playframework-2.0, typafe, typafe-config

Scala - play2 config секция - скала, playframework-2.0, typafe, typafe-config

Реших да опитам скала с play2. Опитвам се по някакъв начин да получа конфиг секция от конфигурацията на приложението. Изглежда, че това (по раздел имам предвид цялата част от пощата)

services: {
rest: {
mail: {
uri: "xyz",
authorization: {
username: "xyz",
password: "xyz"
}
}
}
}

код

import com.typesafe.config.ConfigObject
import play.api.Play.current

val config: Option[ConfigObject] = current.configuration.getObject("services.rest.mail")

Това дава Some(SimpleConfigObject()) и там единственият начин, по който всъщност мога да получа mail раздел и го използвайте като ConfigObject е най-малко

config.get.toConfig.getString("uri")

Или мога да получа реалната стойност с

config.get.get("uri").unwrapped().toString

Или за забавление:

config.get.toConfig.getObject("authorization").toConfig.getString("username")

Така или иначе ми се струва, че го правя прекалено сложно. Има ли по-лесен начин да получите секция от конфигурацията?

Отговори:

1 за отговор № 1

Тъй като библиотеката с конфигурации има Java API, тя може да се почувства малко по-подробна, използвайки я от Scala. Има някои обвивки Scala, които позволяват по-компактен синтаксис. виждам https://github.com/typesafehub/config#scala-wrappers-for-the-java-library.


0 за отговор № 2

Аз ще публикувам това като отговор за бъдещи справки.

След още едно време на игра с кода, който намерих parseResourcesAnySyntax метод, който прави точно това, което искам и тъй като имам config разделени на няколко части за отделни среди (application.dev.conf и т.н.) мога просто да направя

import com.typesafe.config.{Config, ConfigFactory}
import play.api.Play._

val config: Config = ConfigFactory.parseResourcesAnySyntax("application.%s.conf" format current.mode)

и след това използвайте

config.getString("uri")

// or

config.getString("authorization.username")

// or if I want to use part of it as another section

val section: Config = config.getConfig("authorization")
section.getString("username")

Разбира се, друга жизнеспособна алтернатива е използването на обвивка, както препоръчва мистър Стебел.