Как создать глобальную переменную с Play Framework 2.0
Как создать глобальный объект/переменную в Play Framework 2.0 с помощью Scala?
Я хочу создать объект, который когда-то создавал экземпляр, может сохраняться между несколькими действиями контроллера, чтобы разные действия все равно могли вызывать один и тот же объект (потому что инициализация объекта очень дорога).
Возможно ли это, не сохраняя его в БД? Я попытался вставить объект в объект Global для метода onStart, как показано здесь:
http://www.playframework.org/documentation/2.0/ScalaGlobal
Это был мой код:
(в корневой папке приложения)
object Global extends GlobalSettings {
override def onStart(app:Application) {
var foo = new Foo
}
}
}
И в моих действиях контроллера я пытаюсь просто вызвать переменную по имени, но это не сработало.
Ответы
Ответ 1
Если ваши глобальные переменные также должны быть доступны для методов в Global
, поместите их в Global.scala следующим образом:
package object globals {
lazy val abc = Play.maybeApplication.flatMap(_.configuration.getString("abc")).getOrElse("default_value_of_abc")
lazy val someActor = Akka.system.actorOf(Props[SomeActor], name = "someActor")
}
И затем используйте его в своих контроллерах следующим образом:
println(globals.abc)
globals.someActor ! SomeMessage
UPDATE
Документация с тех пор была обновлена, как добавить Global.scala
в идиоматическую игру! путь с документами для Scala и Java.