問題タブ [spring-batch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database - アイテムの大きなリストを処理するプログラムからデータベースにクエリを実行する効率的な方法
itemReader、itemProcessor、およびitemWriterを使用した春のバッチプログラムがあります。
処理するレコードが 10,000 件あるとします。各アイテムについて、いくつかの条件を決定し、いくつかのデータを追加するために、いくつかのデータベーステーブルからデータを取得したいと考えています。
これは処理中に行われると思います。
質問: これを行うのに最適な設計は何ですか? itemProcessor に SimpleJdbcTemplate を注入するアイテムごとに複数の Select クエリを実行することに少し懐疑的です。これを行う他の効率的な方法はありますか??
前もって感謝します!!ニック
java - 固定順序のSpringバッチマルチスレッドジョブ
フラット CSV ファイルのチャンク (コミット レベル = 10) を読み取り、出力を別のフラット ファイルに書き込む、Spring バッチ ジョブを作成しました。簡潔でシンプル。ローカル スケーリングをテストするために、10 個のスレッドのプールを持つ TaskExecutor を使用してタスクレットを構成し、マルチスレッド ステップ パターンを使用して並列処理を導入しました。予想どおり、これらのスレッドは、チャンクがいっぱいになるまでアイテムを同時に読み取り、チャンクが出力ファイルに書き込まれます。また、予想どおり、この同時読み取りのために項目の順序が変更されました。しかし、できれば複数のスレッドを使用することで得られるパフォーマンスの向上を活用しながら、固定された順序を維持することは可能でしょうか?
java - SpringBatchでItemProcessors間でデータを渡すための最良のアプローチは?
アイテムプロセッサ間でアイテムの処理に関連するデータを渡す必要があります。データを永続化する必要はありません。これが最善のアプローチです(現在、StepSynchronizationManagerを使用してstepExecutionにアクセスし、ExecutionContextにデータを保存しています)。
partitioning - 入力ファイル用のSpringBatchカスタムパーティショナー
分離されたアイテムを含むフラットな入力ファイルをパーティション化しようとして;
います。行の最初の項目はカテゴリを示しています。このカテゴリでパーティションを作成して、カテゴリごとに専用のスレッドで処理されるパーティションを作成したいと思います。しかし、このパーティショニングロジックをカスタムで実装する方法に戸惑っていますPartitioner
。パーティショニングはチャンク指向のステップの前、つまり読み取り、書き込みの前に行われるようです。したがって、カスタムパーティショナーのファイルを1行ずつ読み取り、その行からカテゴリフィールドを取得し、同じカテゴリの行を収集して作成する必要があるようです。ExecutionContext
これらのコレクションのそれぞれについて?
私は正しい方向を見ていますか?経験のある人は、ファイル(疑似コードの場合もあります)を使用して小さな例を提供できますか?
spring-batch - Spring バッチ ジョブでサンプルの helloWorld アプリケーションを開発していますか?
Springバッチでいくつかのサンプルアプリケーションを試しました..しかし、Springフレームワークが初めてなので、それがどのように機能するかについて明確な考えがありませんでした. サンプルアプリケーションでこのSpringバッチの基本を理解するのを手伝ってくれる人はいますか? Springバッチのドキュメントでも、アプリケーションの開発について明確なアイデアを得ることができないと思います..助けてください。
java - Mavenを使用せずに簡単なSpringバッチジョブを実行していますか?
私はSpringバッチフレームワークが初めてです。Maven を使用せずにバッチ ジョブを作成して実行できますか? Spring バッチと Maven を接続する Spring バッチ サンプルを見たことがあります。Maven の依存関係を使用せずに実行できる Spring バッチ プロジェクトのサンプルを教えてもらえますか? または、少なくともこれについて考えてください。
multithreading - SpringBatch-複数のスレッドで1つの大きなファイルを読み取る方法は?
問題:サイズが10 MBを超えるファイルを読み取り、SpringBatchを使用してステージングテーブルにロードします。ファイルの読み取り中に状態を維持して、失敗した場合にジョブを再開するにはどうすればよいですか?
ドキュメントによると、FileItemReaderはスレッドセーフではなく、スレッドセーフにしようとすると、再起動性が失われます。したがって、基本的な質問は次のとおりです。
- ファイルをブロック単位で読み取る方法はありますか?各スレッドは、読み取る必要のあるブロックを認識していますか?
- 読み取りを同期化する場合、このシナリオでジョブを再開可能にするには、どのような変更が必要ですか?
誰かが同様の問題に直面したり、それがどのように機能するかを分析したりした場合は、私たちが決定を下すのに役立ちます。
また、ポインタやサンプルコードもありがたいです。
sql - DB2: 複雑なバッチ照会で SYSIBM.DUAL とともに NOT EXISTS を使用する
私はdata1、data2としてJavaオブジェクトにデータを持っています。
data1 と data2 は一緒に、オブジェクトを挿入したい myTable の複合キーを形成します。
書き込みはバッチとして行われます。10 個のオブジェクトを使用して 10 個の INSERT ステートメントを作成し、バッチとして実行します。
上記のデータを制約付きで挿入したい: data1 + data2 はまだ myTable に存在してはならない、つまり data1 + data2 は一意でなければならない --- 一意の場合は書き込み、そうでなければ単に無視する。
私が使用しているクエリは次のとおりです。
単一のデータセットに対して上記のクエリを個別に実行すると、正常に実行されます。
ただし、バッチ シナリオでの実行中に、「com.ibm.db2.jcc.b.ie: Non-atomic batch failure.」というメッセージが表示されます。エラー。
バッチシナリオで SYSIBM.DUAL を使用することに関係があると思います。
失敗しているコード:
クエリを挿入:
ステートメント セッター:
item は、書き込む 2 つの列を保持する Java オブジェクトです。
エラーは次のとおりです。
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; 不適切な SQL 文法 [insert into mySchema.myTable(column1, column2) select ?,? from SYSIBM.DUAL where not exists (?=A.column1 および ?=A.column2 の mySchema.myTable A から 1 を選択)]; ネストされた例外は com.ibm.db2.jcc.b.ie: 非アトミック バッチ エラーです。バッチは送信されましたが、バッチの個々のメンバーで少なくとも 1 つの例外が発生しました。getNextException() を使用して、バッチ処理された特定の要素の例外を取得します。
spring-batch - Spring Batch の StepExecutionContext に似た ChunkExecutionContext はありますか?
各チャンクが書き込まれた後に何かを行い、チャンクに対してのみ有効なコンテキスト内にデータを設定します。このデータは、ChunkListener
のafterChunkメソッド内で使用されます。
を使用StepExecutionContext
してこれを実現できますが、完全に正しいとは思えません。
チャンクに対してのみ有効なコンテキスト情報をどこに保存するかについて、より多くの情報を持っている人はいますか?
java - SpringバッチでFlatFileItemWriterを使用してstdoutに書き込むにはどうすればよいですか?
Spring バッチ プロジェクトの Bean 定義ファイルで次のライターを構成しています。
ここで、/path/to/somefile に書き込む代わりに、出力を stdout に送りたいと思います。その理由は、このジョブをコマンドライン ランチャーから起動し、出力を別の UNIX プログラムにパイプするためです。
リソース プロパティを「file:/dev/stdout」に設定してみましたが、例外が発生しました: org.springframework.batch.item.ItemStreamException: Unable to create file: [/dev/stdout]
これを処理できるすぐに使えるリソースがあるかどうかを確認しようとしましたが、どれが仕事をすることができるかについては少しわかりません...
ご協力いただきありがとうございます。
編集:以下は、あなたのアドバイスに従って、私が思いついた解決策です: