Доступ к Play! 2.0 в application.conf?
Ранее в игре! v1 было действительно легко определить переменные конфигурации в application.conf
, а затем получить к ним доступ так:
play.configuration("db.driver")
Однако теперь я не могу найти что-либо в документации для аналогичного использования в v2 или в качестве подходящей альтернативы. Какой метод для этого?
Ответы
Ответ 1
Как и в Play 2.5, play.api.Play.current
устарел. Вы должны использовать инъекцию зависимости, чтобы ввести Environment
или Configuration
, и использовать это для чтения значения конфигурации:
class HomeController @Inject() (configuration: play.api.Configuration) extends Controller {
def config = Action {
Ok(configuration.underlying.getString("db.driver"))
}
}
Оформить покупку Документация по воспроизведению для более подробного обсуждения.
Ответ 2
В качестве альтернативы Play 2.0 Scala будет:
Play.current.configuration.getString("db.driver")
Вам также понадобится import play.api.Play
Полные документы для этого здесь.
Ответ 3
Применяется к Play 2.0. В Java-контроллере вы можете использовать следующее:
String optionValue = Play.application().configuration().getString("db.driver");
Чтобы получить переменную в поле зрения, используйте это:
@play.Play.application().configuration().getString("db.driver")
Ответ 4
В Воспроизвести 2.3.2 для Java вы можете использовать опцию com.typesafe.config.ConfigFactory
:
Config conf = ConfigFactory.load();
String myFooBarConfiguration = conf.getString("foo.bar");
Быстрый переход API!
Ответ 5
Другой метод, протестированный в Play 2.3 [.8]/Java для доступа к значениям из application.conf:
Чтобы проверить версию Play, просмотрите файл-проект/плагины. Строка, содержащая "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.
Ответ 6
В Play Scala 2.3.x и 2.4.x, чтобы прочитать значение из conf/application.conf
, вы можете сделать следующее:
import play.api.Play.current
...
current.configuration.getString("db.driver")
Ответ 7
В Play 2.0.1 Java вам нужно сделать это:
import play.Application.*;
...
String optionValue = play.Play.application().configuration().getString("my.config");
Ответ 8
В Play 2.1, Scala
Во-первых, вы должны import play.api.Play
Play.current.configuration.getString("varibale name")
Ответ 9
Если вы используете Воспроизвести Scala, я нашел этот подход наиболее подходящим после поиска некоторых лучших практик. Для этого я ввел конфигурацию, а затем обратился к моему конфигурационному ключу следующим образом:
import play.api.Configuration
class myClass @Inject()(
config: Configuration
) {
val configValue: String = config.underlying.getString("configKey")
}
Таким образом, вы не получите Option, а String. Если он недоступен, он выдает исключение:
Error injecting constructor, com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'configKey'
Основная цель состояла в том, чтобы избежать чистого решения get
, которое @peoplemerge уже упоминалось при метании конкретного исключения, если None.
Ответ 10
В Java с воспроизведением > 2.5.X вы можете прочитать значения конфигурации через хелпер 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
Ответ 11
В качестве небольшого вклада/улучшения во все ответы @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
...
Ответ 12
Как уже упоминалось, вам нужно импортировать 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
Кто-нибудь предлагает лучший ответ?
Ответ 13
//новый подход post 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
Ответ 14
Существует несколько способов доступа к конфигурациям в Play с помощью Scala
Следующие работы в 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
.....
}