私は毎朝サーバー上で cron ジョブを実行しています。これは基本的に 3 つの異なる Java プログラム (すべてメイン メソッドを持っています) を次々と実行し、それらをP1、P2、およびP3と名付けます。
最初のプロセスP1と最後のプロセスP3は非常に高速ですが、2 番目のプロセスP2は複雑なビジネス ロジックを実行するため、かなりの時間を消費します (1 日以上実行されることもあります)。
ビジネス計算は非常に複雑で、その日のプロセスに関与するクライアントの周期性に基づいています。
1日目に登録された100 万のクライアントを 1 日目に処理する必要があるとします。
2日目には、クライアント数が少なくなり、1000クライアントになりました。
2 番目のプロセスP2が実行されている場合、最後のプロセスp3が終了するとSUCCESSに変更されるため、 PENDINGのステータスでクライアント処理の詳細がデータベースに保存されます。
今私の問題はこれです:
1日目
- プロセスP1は同じ日に完了し、プロセスP2はその後に開始されます。
2日目
1 日目に開始されたプロセスP2はまだ実行中で、データベースに詳細を入力しています。
すべてのプロセスP1、P2、およびP3が DAY 2 で開始され、DAY 2 のすべての作業が完了します。
したがって、DAY 2 の最後のプロセスP3が完了すると、DAY 1 の最後のプロセスP3がまだ開始されていなくても、DAY 1 のプロセスP2によってPENDING ステータスで入力されたデータベース内の以前のエントリはすべてSUCCESS に更新されます。
つまり、DAY 2 プロセスP3は、DAY 1 プロセスP2によってデータベースに入力されたエントリのステータスを更新します。
この問題を解決する方法を決定しようとしています。
私が考えたことの 1 つは、データベース エントリに日付を設定することですが、プロセスP3はどの日付を更新する必要があるかをどのように知るのでしょうか。
私はこれが多くの混乱に見えることを知っています。しかし、もっと明確にすることができるかどうか教えてください。