Играть в! 2.4 добавить дополнительный файл конфигурации

Недавно я обновил платформу Play до версии 2.4, и у меня возникла проблема с управлением конфигурацией.

Раньше я использовал основной файл application.conf и специальные файлы конфигурации application.dev.conf и application.prod.conf для переопределения некоторых значений конфигурации.

Однако в новой версии кажется, что конфигурация неправильно объединена. Я использую следующий ApplicationLoader, как показано в документации:

package config

import com.typesafe.config.ConfigFactory
import play.api.{Logger, ApplicationLoader, Configuration}
import play.api.inject._
import play.api.inject.guice._

class CustomApplicationLoader extends GuiceApplicationLoader {
  override def builder(context : ApplicationLoader.Context) = {
    val mode = context.environment.mode.toString
    val extraConfName = s"application.${mode.toLowerCase}.conf")
    val extra = Configuration(ConfigFactory.load(extraConfName))
    initialBuilder
      .in(context.environment)
      .loadConfig(extra ++ context.initialConfiguration)
      .overrides(overrides(context): _*)
  }
}

И я добавил этот загрузчик классов в свой файл application.conf:

play.application.loader = "config.CustomApplicationLoader"

Но в окончательной конфигурации учитываются только значения из application.conf. Любая идея о том, откуда это могло взяться?


person aveuiller    schedule 25.09.2015    source источник


Ответы (1)


Похоже, я использовал неправильный метод из ConfigFactory, использование метода parseResource будет извлекать только дополнительные ключи вместо того, чтобы помещать их в конфигурацию по умолчанию, как это делает load.

Таким образом, следующий код будет работать так, как ожидалось:

class CustomApplicationLoader extends GuiceApplicationLoader {
  override def builder(context : ApplicationLoader.Context) = {
    val mode = context.environment.mode.toString
    val extraConfName = s"application.${mode.toLowerCase}.conf"
    val extra = Configuration(ConfigFactory.parseResources(extraConfName))
    initialBuilder
      .in(context.environment)
      .loadConfig(context.initialConfiguration ++ extra)
      .overrides(overrides(context): _*)
  }
}
person aveuiller    schedule 25.09.2015