2016-03-22 31 views
3

良いバッチ処理フレームワークを選択することで多くの改善が期待できる古いコードベースがあります。ステップ間のデータに関するSpringバッチのベストプラクティス

私はSpringバッチを試し始めました。ドキュメントを読んだ後、複数の書籍やフォーラムを読んだ後に、実際にそれを感じる最良の方法を決定したので、私たちの一部を再開発しました。既存のアプリをSpringバッチに追加するここで

は私が再開発しましたシンプルなアプリです:テーブルから

  • 読み出し線と所与の基準が満たされた場合、リスト
  • から項目を無視するPOJO
  • にラインを解析しますFTPのアップロードが成功した場合、DBで処理としてFTPに解析されたリストの
  • マーク要素を、ファイルをアップロードして解析されたリスト
  • からファイルを書く

さて、私がやったことは、私は3つのステップで単一のジョブを作成しましたされています

ステップ1は次のとおりです、POJOにライン(リーダー、この場合にはベースのJDBCを)読ん項目(プロセッサ)を除外し、ファイルへの書き込み(ライター)。簡単です。 :)

ステップ2:FTP

ステップ3にアップロードするタスクレットは:私はトラブルにいるよどこ今、これがあります。私はStep1のPOJOリストを再利用する必要があります。

私の理解では、私は2つの選択肢を持っていることである。

1)のいずれか、StepExecutionContextを使用するステップ1とステップ2とステップ2とステップ3の間にリストを渡すことがListとExecutionContextPromotionListenerの実装を保存します。

又は

2) Iは同じリーダーとプロセッサーを使用して、異なるライタにこの時間を使用します。

私は本当にアプローチ

1のどちらか好きではない)が汚いようで、私はこの文脈で何か大きなものを置くために良い習慣ではないことを複数の場所で読んだ(私のリストには5から10000を開催しますオブジェクト)

2)リソースの浪費と思われますが、悪い習慣です。このシナリオでは、私はそれを取り除くことができますが、より複雑なリーダー/プロセッサの場合は、作業の重複が非常に重いことになります。

私が探していることを実行する最良の方法は何ですか? スプリングバッチを正しく使用していますか?

答えて

2

これは私がジョブステップを構成する方法です。

  1. 読む:DB 書き込み:File1の
  2. 読む:File1の プロセス:SkipFilter 書き込み:File2の
  3. システムコマンドタスクレット
  4. 読む使っ
  5. FTP:ファイル1またはFile2の 書き込み:DB

私は、下流のステップが実行されている間にDBの変更を防ぐためのステップを追加しました。

+0

はい、これはおそらく私の2つのオプションより優れています。 :) Stil、しかし、私は前に作成したファイルを反復処理する必要があるので、処理が遅くなり、無駄になります。私はSpringのバッチに正しく近づいていると思いますか? –

+0

もう1つ:私はシステムコマンドタスクレットを使用しないでください。これは、実行中のサーバーにコードを依存させるため、FTPアップロードを処理する独自のタスクレットを作成します。しかし、これは単なる詳細です:) –

1

私は「Spring Batch Essientials」の本を読んでいて、データを保持するために「ホルダービーンズ」を使う考えがありました。 Beanを注入して設定し、データを取得します。

+0

私はこの解決策をスレッドセーフにする方法です。 :) –

関連する問題