Реших да опитам скала с 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")
Разбира се, друга жизнеспособна алтернатива е използването на обвивка, както препоръчва мистър Стебел.