我有一个名为“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