Доступ к 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

Кто-нибудь предлагает лучший ответ?

Ответ 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 
 .....
 }