2017-12-15 4 views
0

JobRepositoryがJobステータスのCRUD操作に使用されていることを理解します。私は永続的なデータベースを使用していますか?JobRepositoryはデータベース内の履歴メタデータを保持しますか、それとも現在の実行中のプロセスのみを保存しますか?Spring Batch Job Repositoryを使用する理由は何ですか?

また、ジョブスケジューラで実行された一連のジョブがあり、それぞれに独自のJobRepositoryデータベースがある場合は、同じ永続テーブルを共有するか、JobRepositoryごとに異なるデータベースを作成しますか?

答えて

0

SpringバッチJobRepositoryは、現在のジョブだけでなく、すべてのバッチジョブの詳細を格納します。 Springコンテキストで同じjobRepository設定を共有する限り、ジョブをどのように実行するかは関係ありません。ジョブの詳細をjobRepositoryに設定された同じデータベースに保持します。

<bean id="jobRepository" 
     class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"> 
     <property name="dataSource" ref="dataSourceName" /> 
</bean> 
1

ジョブリポジトリは春のバッチを実行するために必要な、それは実際には(例えば、春のバッチ管理者を設定したり、独自のUIを書いて)どんな価値を提供するために、作業のビットを必要とするものの一つです。実際には、Spring Batchを使って見たことがあるほとんどのプロジェクトでは、ジョブリポジトリは完全に無視される傾向のある書き込み専用のものです。あなたはそれを持っている必要があります、誰もそれを見ていることはありません。 SQLクライアントを使用してテーブルを掘り起こし、エラー、警告、およびスタックトレースを含むログを検索することは、ロギングを適切に設定し、適切なロギングを行うことが重要なサーバー側のビジネスにとって難しい要件です。

IMHOの場合、ジョブリポジトリをオプションにすると、複雑さが増します。ほとんどのプロジェクトは単にそれを必要としません。また、それを必要とするほとんどのプロジェクト(マルチノードバッチクラスタなど)では、実際にはクロスクラスタ状態管理(例:Zookeeper)を提供することを意図した他の技術も検討する必要があります。また、その時点で、Spring Cloud、ハープなどのソリューションを検討する方がよいでしょう。スプリングバッチソートは、こうした種類のソリューションに向けた足がかりです。オフに注意すべき

いくつかの点:

  • 春のバッチを使用すると、おそらく本番データベースとは別の場所にしたい情報を持つテーブルを作成し、記入します。
  • プロダクションDBで春のバッチテーブルを作成した場合(基本的に気にしないテーブルの余分なデータベースをプロビジョニングすると、過剰な作業になる可能性があるため)、おそらくこれらのテーブルがdb移行スクリプト。
  • これらのテーブルに蓄積されたデータを定期的に整理することを検討することもできます。
  • デフォルトでは、ジョブは1回だけ実行できますが、実際には複数回実行できるように設定する必要があります。実際にはすでに実行されているジョブリポジトリに格納されており、何かを何度も実行するとデフォルトでは何も実行されません。この「機能」は私を複数回驚かせてくれました。解決策は、あなたの仕事に.incrementer(new RunIdIncrementer())を追加することです。
  • Springバッチでは、ジョブとステップがクラスタ内に分散されることを前提としています。したがって、ジョブリポジトリは、永続化される実行コンテキストを介して情報を渡す唯一の方法です。
関連する問題