Play Framework 2.4.1:如何在加载配置文件后立即获取配置值

Play Framework 2.4.1: How to get configuration values just after configuration file has been loaded

我需要在加载配置文件之后但在应用程序实际启动之前读取一些配置值。

在 Play 2.3.x 中,我曾经覆盖 GlobalSettings.onLoadConfig,但在 Play 2.4.x 中已弃用。官方文档说应该使用 GuiceApplicationBuilder.loadConfig 代替。

同样,文档有点差,我无法找到更多详细信息或示例...因此非常感谢任何帮助。

1。应用启动前

如果需要在app启动前读取配置,可以采用这种方式:

modules/CustomApplicationLoader.scala:

package modules

import play.api.ApplicationLoader
import play.api.Configuration
import play.api.inject._
import play.api.inject.guice._

class CustomApplicationLoader extends GuiceApplicationLoader() {
  override def builder(context: ApplicationLoader.Context): GuiceApplicationBuilder = {
    println(context.initialConfiguration) // <- the configuration
    initialBuilder
      .in(context.environment)
      .loadConfig(context.initialConfiguration)
      .overrides(overrides(context): _*)
  }
}

conf/application.conf 添加了以下内容:

play.application.loader = "modules.CustomApplicationLoader"

有了这个,我在控制台中看到以下内容(剪掉太长):

Configuration(Config(SimpleConfigObject({"akka":{"actor":{"creation-timeout":"20s"...

来源:documentation.

2。不在应用程序启动之前

如果你不需要在应用程序启动前读取配置,可以使用这种方法代替:(它是如此简单)Module绑定方法需要一个播放环境和配置供你读取:

class HelloModule extends Module {
  def bindings(environment: Environment,
               configuration: Configuration) = {
    println(configuration) // <- the configuration
    Seq(
      bind[Hello].qualifiedWith("en").to[EnglishHello],
      bind[Hello].qualifiedWith("de").to[GermanHello]
    )
  }
}