Sprin Batchの基本構成


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Sprin Batchの基本構成

job    ・・・ジョブの実行単位。コマンドライン、javaのコード上から呼び出される単位。
┣step  ・・・ジョブ内の処理の単位。このステップ毎に条件分岐・リスタート・並行処理の制御が可能。
┃┃      1つのジョブ内に複数指定可能。
┃┗tasklet・・・・論理的な実行単位であるstepに紐づく物理的な処理単位。
┃ ┃       readerなどの下位のbeanをhandlingする。
┃ ┃       chunkの処理を行うChunkOrientedTasklet、コマンドライン入力を行うSystemCommandTaskletなど。
┃ ┃       stepを実現するためにフレームワークが規定しているhandler群のイメージ??
┃ ┗chunk ・・・・データ※(以下item)のコミット単位。
┃  ┣reader・・・itemの入力を行うクラスを定義する。
┃  ┣prosessor・・・読み込んだitemへの編集処理を行うクラスを定義する。
┃  ┣writer・・・読み込んだitemの出力処理を行うクラスを定義する。
┃  ┗skippable ・・・ジョブ内の各要素にて例外が発生しても処理をスキップし、
┃           次のitemの処理を続ける例外を定義する。
┗listeners ・・・ジョブ内の各要素(step~skippable)の処理前後に行う処理を定義する。

※Spring Batch では入出力データの事を"item"として記述しているため本稿もそれにならう。

上記をxmlで記述した場合

01<!-- bean定義 -->
02<job id="Batch1" xmlns="http://www.springframework.org/schema/batch">
03	<step id="step1" parent="faultTolerantStep">
04		<tasklet transaction-manager="transactionManager">
05			<chunk reader="batch1ItemReader" processor="batch1Processor"
06				writer="batch1Writer" commit-interval="1" skip-limit="100">
07				<skippable-exception-classes>
08					<include class="com.example.batch.exception.Batch1SkipException" />
09					<include class="org.springframework.dao.DataIntegrityViolationException" />
10				</skippable-exception-classes>
11				<listeners>
12					<listener ref="batch1ItemListener" />
13				</listeners>
14			</chunk>
15		</tasklet>
16	</step>
17	<listeners>
18		<listener ref="batch1JobExecutionListener" />
19	</listeners>
20</job>
21<!-- 以下のbean定義は省略 -->

02行目,20行目:jobを定義。id属性の定義内容がJobidとなり、コマンドラインなどからの呼び出し時に指定される。
03行目,16行目:stepを定義。parent属性は基底クラスのようなもの。
        例ではbean:faultTolerantStepに指定したproperty情報を引き継いでいる。
04行目,15行目:taskletを定義。transaction-manager属性は詳細確認中。
05~06,14行目:chunkを定義。reader,processor,writerのbeanを指定。commit-intervalなどコミットに関する情報を定義。
07行目,10行目:skippableを定義。処理中指定されたExceptionが発生したitemをスキップし、後続のitemの処理を行う。
11行目-13行目:step内で起動するlistenersを定義。afterRead,onReadErrorなど各要素の前後、例外発生時に実行される処理を定義できる。
17行目-19行目:job内で起動するlistenersを定義。ジョブの実行前後に実行される処理を定義できる。