手順#1から手順#4は、からデータベースを読み込んでいるため、これらの4つの手順は別々の手順を示していますが、これらの4つの手順は1つの手順です。また、問題を機能的に解決するだけでなく、DBのヒット数を減らす必要があります。 (国、州、市)は、あなたの読者が並列スレッドすなわちWHERE COUNTRY = ? AND STATE =? AND CITY = ?
内の各トリプル1000のチャンクでデータを読み込む -
あなたは春のバッチ分割あなたはトリプルしてデータを分割アプローチを使用することができます。
Partitionerインターフェイスを実装し、SELECT
クエリを実行してGROUP BY COUNTRY,STATE,CITY
を実行してトリプレットを作成する必要があります。
その後、あなたはJdbcPagingItemReader
を返し、あなたがPagingQueryProvider
のWHERE
句でPartitioner
に移入COUNTRY,STATE,CITY
値を使用し、簡単な読者を書きます。
構文@Value("#{stepExecutionContext[...]}"
を使用して、パーティション・ロジックから読者にパーティション値を注入する必要があります。
org.springframework.batch.core.partition.support.Partitioner
あなたは一度にすべてのパーティションを実行するために必要とされることはありません - あなたはマスターのステップを分割するSimpleAsyncTaskExecutor
を提供し、適切な値にそのconcurrencyLimit
を設定することにより、並列スレッドの数を制御することができます。
次に、プロセッサとライターを作成します。パーティションロジックから値を注入する場合は、ステップ&のステップコンポーネントを@StepScope
にマークする必要があります。
Sample of partitiongですが、xmlベースの設定です。私はJavaベースの設定を好む。
希望すると助かります!
お時間をいただきありがとうございます。これらのプロセスを1つのステップに連鎖させたくないので、時間がかかることがあります。私は、すべてのステップが並行であることを望みます。はい、私はあなたが言及した第二の選択肢に基づいて試していましたが、私はこのような連鎖プロセスのためのいくつかのサンプルを得ることができません。 – Rajagopal
私はあなたを完全に理解しているかわかりません。最初の例は、カスタムタスクレットの実装を介して実行コンテキストにコンテンツを追加する方法を示しています。これは、CompositeItemProcessorによるプロセスの連鎖とは異なります。あなたのコメントで、あなたは言った: '...私はこのようなチェーンプロセスのサンプルを得ることができません... 'あなたはチェーンプロセスの例を探していますか、または実行コンテキストにコンテンツを追加する詳細については? – adam