backend/app/AppLoader.scala (27 lines of code) (raw):
import play.api.ApplicationLoader.Context
import play.api.{Application, ApplicationLoader, Configuration, LoggerConfigurator}
import services.Config
import utils.{AwsDiscovery, DiscoveryResult}
class AppLoader extends ApplicationLoader {
override def load(contextBefore: Context): Application = {
val discoveryResult = discoverConfig(contextBefore)
val config = discoveryResult.updatedConfig
val contextAfter = contextBefore.copy(initialConfiguration = Configuration(config.underlying))
startLogging(contextAfter, discoveryResult)
new AppComponents(contextAfter, config).application
}
private def discoverConfig(context: Context): DiscoveryResult = {
val config = Config(context.initialConfiguration.underlying)
config.aws match {
case Some(discoveryConfig) =>
AwsDiscovery.build(config, discoveryConfig)
case _ =>
DiscoveryResult(config, Map.empty)
}
}
private def startLogging(context: Context, discoveryResult: DiscoveryResult): Unit = {
LoggerConfigurator(context.environment.classLoader).foreach {
_.configure(context.environment, context.initialConfiguration, discoveryResult.jsonLoggingProperties)
}
}
}