"JobStatus"というプレイモデルがあり、JobStateを持つ列挙型(Running/notRunning)という1つのプロパティがあります。Playモデル保存関数がデータベースに実際に書き込んでいない
クラスはモデルを拡張し、シングルトンとして実装されます。基礎となる表の唯一のレコードを取得するには、getInstance()メソッドを呼び出します。
私は毎月実行されるジョブを持っています。ジョブでは、JobStatusオブジェクトの状態をさまざまなタイミングで前後に切り替え、.save()を呼び出します。
実際には保存されていないことに気付きました。
仕事がオフに起動すると、それはコードの最初の行だが
JobStatus thisJobStatus = jobStatus.getInstance();
...// exit if already running
thisJobStatus.JobState = JobState.Running;
thisJobStatus.save()
でジョブが実行されたときに、それは戻ってNotRunningにステータスを変更し、もう一度保存します。
MySqlデータベースを見ると、実際のレコード値は変更されません。
これは、他のノードがジョブを実行しようとすると状態をチェックし、NotRunningと見なしているため、ジョブを実行しようとするため、致命的なエラーが発生します。
実際の値がDBにコミットされないため、ジョブ状態を管理するためのわかりやすいスキームが失敗しています。
モデルで.save()を呼び出すと、すぐに再生が強制的にDBに書き込まれますか?
おかげ ジョシュ
私はPlayのドキュメントごとに非トランザクションとして関数を宣言しようとしましたが、うまくいきませんでした。 –
...トランザクションの場合... –
ジョブの状態をトグルしてDBに書き込むことは、長時間実行されているプレイジョブ内で行われる操作であると考えているだけです。 –