Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Play Framework: доступ к глобальной переменной и управление ею

Автор вопроса: Bla...Ответов: 1

В настоящее время я создаю приложение для бухгалтерского учета, теперь я хочу сохранить эту "дату окончания периода", которую можно изменить. Я считаю, что мы можем использовать глобальную переменную, однако я не знаю, как это сделать. До сих пор я пытался создать переменную в application.conf, подобную этой application.date="2014/12/15".

Более того, я не уверен, как изменить значение, используя описанный выше подход. Есть ли хороший подход к этой проблеме?

  • Прежде всего, application.conf содержит константы с глобальной конфигурацией приложения, а не переменные. Не могли бы вы объяснить вашу проблему более кратко? Daniel Olszewski 11.12.2014
  • application.conf не лучшее место для хранения изменяемых значений. Он хранит конфигурации вашего приложения, в основном жестко закодированные значения, которые могут измениться перед развертыванием. Mon Calamari 11.12.2014
  • Что ж, моя цель - найти способ сохранить дату окончания этого периода без создания какой-либо таблицы в моей базе данных. Можете ли вы предложить способ сохранить эту дату? Я прочитал несколько статей, в которых предлагается создать object Global extends GlobalSettings, но я не знаю, как получить доступ или изменить значение. Bla... 11.12.2014
  • Если вы не хотите использовать базу данных для сохранения изменяемого значения, единственным вариантом является использование файла в файловой системе. Вы можете сохранить это в другом файле в папке resources. Например, resources\mydata Soumya Simanta 11.12.2014

scala

Ответы

Ответ 1 · рейтинг 5 · Andreas Neumann

Возможный способ - использовать Singeleton Object, который инициализируется в Global.scala.

Глобальный объект должен находиться в корневом каталоге scala приложения или настраиваться через application.conf.

Синглтон для общих данных

в app/shared/Shared.scala(имя свободно)

package shared

object Shared {
 private var data: Int = 0

 def setData(d: Int) : Unit = data = 0
 def getData : Int = data
}

В application.conf вы можете настроить глобальный вызов при запуске приложения (вы также можете просто поместить файл с именем Global.scala в приложение, который будет использоваться по умолчанию)

application.global= settings.Global
shared.initial = 42

In app/settings/Global.scala

object Global extends GlobalSettings {
  override def onStart(app: Application) {
   // Here I use typesafe config to get config data out of application conf
   val cfg: Config = ConfigFactory.load()
   val initialValue = cfg.getInt(shared.initial)
   // set initial value for shared
   Shared.setData(initialValue)
  }
}

В коде воспроизведения, чтобы получить или установить общие данные.

import shared.Shared

Shared.getData
Shared.setData( 8 )

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы