私のアプリケーションでは、すべてのユーザーのデータを処理し、収益、税金の計算、すべてのユーザーのステートメントの生成などのさまざまなタスクを実行する一連のスケジュールされたタスクがあります。これらのプロセスはユーザーごとに実行する必要があるため、ユーザー数が多いため、多くの時間 (数時間) がかかります。あるユーザーのデータ処理は、別のユーザーのデータ処理から完全に独立しているため、並行して実行できます。ここでのオプションは何ですか? このような大規模/一括操作を行うためのベスト プラクティスは何ですか。spring、jpa、および休止状態で J2SE プラットフォームを使用しています。
2 に答える
バッチを介して同じことを行う必要があります。
Spring を使用していると述べたので、Spring Batchの使用を検討できます。
Spring Batch は、ロギング/トレース、トランザクション管理、ジョブ処理統計、ジョブ再起動、スキップ、リソース管理など、大量のレコードの処理に不可欠な再利用可能な機能を提供します。また、最適化とパーティショニング技術により、非常に大量で高性能のバッチ ジョブを可能にする、より高度な技術サービスと機能も提供します。
実装方法については、リファレンス マニュアルを参照してください。
スケジュールされたタスクの春のドキュメントを見てください: http://static.springsource.org/spring/docs/3.0.x/reference/scheduling.html
スケジュールされたタスクを実行する最も簡単な方法は @Scheduled アノテーションを使用することであり、cron スタイルのタイミングを使用できます。ユーザーごとに、それぞれ異なるスレッドでタスクを実行できます。
@Scheduled(cron="*/5 * * * * MON-FRI")
public void doSomething() {
List<User> users = getUsers();
for(User user: users) {
MyTask task = new MyTask(user);
Thread t = new Thread(task);
t.start();
}
}
MyTask が Runnable であることを確認してください。
大量のデータとユーザーがいる場合は、Spring Batch を見ることができます: http://static.springsource.org/spring-batch/