Доступ Играть! 2.0 переменные конфигурации в приложении.конф?


ранее в игре! v1 было очень легко определить переменные конфигурации в application.conf а затем получить к ним доступ Вот так:

play.configuration("db.driver")

однако теперь я не могу найти ничего в документации для аналогичного использования в v2 или надлежащей альтернативы. Каков метод для этого?

13 78

13 ответов:

начиная с игры 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.0 Scala эквивалентно этому было бы:

Play.current.configuration.getString("db.driver")

Вам также понадобится import play.api.Play

полные документы для этого здесь.

применяется для игры 2.0-In Java Controller вы можете использовать следующие:

String optionValue = Play.application().configuration().getString("db.driver");

чтобы получить значение переменной в виде используйте этот:

@play.Play.application().configuration().getString("db.driver")

на играть 2.3.2 для Java можно использовать :

Config conf = ConfigFactory.load();
String myFooBarConfiguration = conf.getString("foo.bar");

быстрый переход API!

еще один метод, проверенный в играть 2.3[.8] / Java для доступа к значениям из приложения.conf:

чтобы проверить версию воспроизведения, изучите файл project / plugins. Строка, содержащая "sbt-plugin", должна иметь спецификацию версии, например"2.3.8".

Если, например, приложения.conf содержит строки

myConfigStringValue=abc
myConfigBooleanValue=true

можно запросить эти значения из файла/класса java, например

import play.Configuration;
...
String myString = Configuration.root().getString("myConfigStringValue");
Boolean myBoolean = Configuration.root().getBoolean("myConfigBooleanValue");

получить... методы возвращают null, если значение не найден, есть еще и get... методы, которые принимают значение по умолчанию в качестве аргумента.

Подробнее см. https://www.playframework.com/documentation/2.3.x/api/java/index.html

и осмотреть класс.Конфигурация.

В Игре Scala 2.3.x и 2.4.х, чтобы прочитать значение из conf/application.conf, вы можете сделать следующее:

import play.api.Play.current
...
current.configuration.getString("db.driver")

в Play 2.0.1 Java, вам нужно сделать это:

import play.Application.*;
...
String optionValue = play.Play.application().configuration().getString("my.config");

В Игре 2.1, Scala Во-первых, вы должны import play.api.Play Play.current.configuration.getString("varibale name")

В случае, если вы используете Играть 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'

главная цель состояла в том, чтобы избежать чисто get решение @peoplemerge уже упоминалось в то время выбрасывание определенного исключения, если его нет.

в Java с play > 2.5.X вы можете прочитать значения конфигурации с помощью помощника ConfigFactory:

ConfigFactory.load().getString("redis.url")

или

ConfigFactory.load().getInt("redis.port")

объект Config преобразует param в правильный тип. Он предоставляет методы для обработки любого типа java (getDouble, getLong и т. д.)

Doc: https://www.playframework.com/documentation/2.5.0/api/java/play/Configuration.html

как небольшой вклад / улучшение для всех @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
   ...

как уже упоминалось, вам нужно импортировать игру.прикладной программный интерфейс.Играть.текущий. Тогда, если вы запустите:

current.configuration.getString("db.driver")

на 2.3.x / scala 10 вы получите

type mismatch; 
found   : Option[String]
required: String

Если это обязательно, это будет работать:

url = current.configuration.getString("db.driver").get

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

// новый подход после 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