我有一個名爲「JobStatus」的遊戲模型,它只有一個屬性,一個帶有JobState的枚舉(Running/notRunning)。Play模型保存功能實際上並沒有寫入數據庫
該類擴展了模型,並以單例實現。您將其稱爲getInstance()方法以獲取基礎表中的唯一記錄。
我有一份工作每個月都在運行,我會在不同時間來回切換JobStatus對象的狀態並調用.save()。
我注意到它實際上並沒有保存。
當工作開始了,這是第一行代碼是
JobStatus thisJobStatus = jobStatus.getInstance();
...// exit if already running
thisJobStatus.JobState = JobState.Running;
thisJobStatus.save()
然後當工作完成,將改變狀態回到notrunning狀態並再次保存。
問題是,當我查看MySql數據庫時,實際記錄值從不改變。
這會導致災難性故障,因爲當其他節點嘗試運行作業時,它們會檢查狀態,並且由於它們將其視爲NotRunning,因此它們都會嘗試運行該作業。
所以我聰明的方案來管理作業狀態失敗,因爲實際值沒有被提交到數據庫。
當我在模型上調用.save()時,我該如何強制Play來立即寫入數據庫?
感謝 喬希
順便說一句我試圖宣佈函數爲非事務性的每個Play的文檔,但沒有奏效。 – 2012-03-06 00:56:54
......如果是因爲交易...... – 2012-03-06 00:57:14
我只想到這可能是因爲切換作業狀態並將其寫入數據庫是一種在長時間運行的作業中發生的操作。 – 2012-03-06 00:57:59