2017-08-24 5 views
-1

私はIBMのJSR352実装を使用してJavaバッチプログラムを開発しようとしています。バッチジョブは膨大な数のレコードを繰り返し処理するので、チャンク処理ジョブとして実装することを選択しました。問題のステートメントは、hereで詳細に定義されています。Readerによるファイルの反復オープンにより、JSR352でパフォーマンスの問題が発生しますか?

IBMが提供しているBonusUpdateの例を参照すると、readerクラスによって読み取られる 'N'個のレコードのそれぞれについて、readerのprocessItem()メソッド内でファイルを開いたり閉じたりしているようです。

パフォーマンスに問題はありませんか?最後に読み込むまでファイルを開いたままにすることはできませんか?

+0

[あなたのプロファイラはあなたに何を伝えますか?](https://stackoverflow.com/questions/890222/analyzing-code-for-efficiency) –

+0

[なぜあなたのお気に入りの会社\ ](https://meta.stackoverflow.com/questions/255745/why-were-not-customer-support-for-your-favorite-company) –

答えて

1

GeneratedCSVReaderのreadItem()メソッドは、毎回ファイルを開きません。バッチコンテナがopen()を呼び出すと開きます。
BonusCreditProcessor内のprocessItemメソッドは、ファイルアクセスを行いません。

+0

読者のオープンな方法で論理を見ると、彼らは覚えているようです行番号と開いている間、カーソルをその行番号に進めるように見えます。 Openが毎回呼び出されない場合、readItem()メソッドは次の行をどのように読み込みますか? – yathirigan

+1

readItem()は、54行目でrecordNumberをインクリメントします。チェックポイントでは、checkPointInfo()メソッドが呼び出され、現在のrecordNumber値が返されます。ジョブの再起動時には、最後に完了したチェックポイントのローカルレコード番号を正しい値に設定するopen()にチェックポイントデータが提供されます。ジョブの最初のサブミット時には、チェックポイントデータがないので、61行目のテストではrecordNumberの設定がスキップされ、最初の値0から始まります。 – DFollis

+0

ありがとうございます。 BonusPayoutの例のこの機能について説明している文書はありますか?私はまだコードを通過した後でもいくつかのクエリを持っています。特にリスナーに。 – yathirigan

関連する問題