背景/コンテキスト
Spring Batch を使用して複数のファイルを処理する方法の例はほぼ無数にありますが、それらのすべてに、すべてのファイルが処理される単一のオブジェクトがあります。そのため、互換性のあるデータを含む多くのファイルはすべて、データベース テーブルなどの単一の宛先ターゲットに処理されます。
10 個の異なるファイルを取り込み、それらを同じデータベース/スキーマ内の 10 個の異なる宛先テーブルにマップするインポート プロセスを構築したいと考えています。ファイル名も、予測可能/コード化可能な方法で毎日わずかに変更されますが、それを処理できると思います. Spring はこれ (多対多のデータ マッピング) を実行できると思っていましたが、方法が見つからないのはこれが最後です。Spring の宣言型構造はいくつかの点で優れていますが、正直なところ、複数のマッピングを設定する方法がわかりません。また、アプリケーションには手続き的な部分がまったくないため、どの形式の反復も実際には使用できません。 . ファイルごとに個別の jar を作成し、コンソールで繰り返しスクリプトを作成することもできますが、これはログとレポートを複雑にします...そして率直に言って、ハックに聞こえます
質問
Spring Batch に、10 個の異なるファイルをそれぞれ 10 個の異なる方法で処理し、それらのデータを同じデータベース内の 10 個の異なるテーブルにマップするように指示するにはどうすればよいですか?
例:
- ファイルにはチルダで区切られた 4 列のデータが含まれており、6 列 (2 つはメタデータ) の
Data_20190501_ABC_000.txt
テーブルにマップする必要があります。ABC_data
- ファイル
Data_20190501_DEF_000.txt
にはチルダで区切られた 12 列のデータが含まれており、14 列のテーブルにマップする必要がありDEF_data
ます (2 つはメタデータです)。 - ファイル
Data_20190501_GHI_000.txt
にはチルダで区切られた 10 列のデータが含まれており、12 列のテーブルにマップする必要がありGHI_data
ます (2 つはメタデータです)。 - など... 10個の異なるファイルとテーブル
チルダ区切りを処理できます。ファイル名の日付をプログラムで処理できると思います。フィールドの1つはdbトリガーで処理できます。他のメタデータ フィールドはファイル名である必要がありますが、それは確かに別の問題になる可能性があります。
アップデート
Mahmoud Ben Hassine が提案したと思うことによると、ファイル/テーブルのペアごとに個別のリーダー、マッパー、およびライターを作成し、それらを start(step1)、next(step2)、build() パラダイムを使用して追加しようとしました。以下は、Spring のドキュメントからのジョブの構成と実行の例に基づいています。
@Autowired
private JobBuilderFactory jobs;
@Bean
public Job job(@Qualifier("step1") Step step1, @Qualifier("step2") Step step2) {
return jobs.get("myJob").start(step1).next(step2).build();
}
どちらのステップも独立して実行されますが、「次の」ステップとして追加すると、最初のステップのみが実行され、ログ出力に「ステップはすでに完了しているか、再開できないため、実行するアクションはありません」という INFO メッセージが生成されます。私はここから行きますか?