0

背景/コンテキスト

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 メッセージが生成されます。私はここから行きますか?

4

1 に答える 1

1

Spring Batch のチャンク指向のステップでは、一度に 1 種類のアイテムしか処理できません。さまざまなチャンク指向のステップを含むジョブを使用します。入力ファイル間に関係や順序がないため、これらのステップは並行して実行できます。

あなたの場合、構成のほとんどは一般的であるため、共通の構成プロパティを使用して抽象的なステップ定義を作成し、それぞれに特定のプロパティを使用して複数のステップを作成できます(あなたの場合、ファイル名、フィールドである必要があります)マッパーとターゲットテーブルを設定します)。

お役に立てれば。

于 2019-05-01T14:48:57.217 に答える