У меня есть модель воспроизведения с именем "JobStatus", и у нее есть только одно свойство, перечисление с JobState, (Running / notRunning).
Класс расширяет модель и реализуется как одноэлементный.Вы вызываете метод getInstance (), чтобы получить единственную запись в базовой таблице.
У меня есть задание, которое запускается каждый месяц, и в задании я буду переключать состояние объекта JobStatus взад и вперед в разное время.и вызовите .save ().
Я заметил, что на самом деле это не сохранение.
Когда задание запускается, его первая строка кода -
JobStatus thisJobStatus = jobStatus.getInstance();
...// exit if already running
thisJobStatus.JobState = JobState.Running;
thisJobStatus.save()
затем, когда задание будет выполнено, оно изменит статус обратно на NotRunning и снова сохранит.
Проблема в том, что когда я смотрю в базу данных MySql, фактическое значение записи никогда не меняется.
Это приводит к катастрофическому сбою, потому что, когда другие узлы пытаются запустить задание, они проверяют состояние и, поскольку они видят его как NotRunning, все они также пытаются запустить задание.
Так что моя умная схема управления заданиемсостояние сбой, потому что фактическое значение не передается в БД.
Как заставить Play немедленно записывать в БД при вызове .save () для модели?
Спасибо, Джош