Springバッチタスクレットの例
Springバッチでは、 `Tasklet`は任意のステップ実行の前または後にリソースをクリーンまたはセットアップするような、単一のタスクのみを実行するために呼び出されるインタフェースです。この例では、バッチジョブの完了後に `Tasklet`を使用してリソース(フォルダ)をクリーンアップする方法を示します。
__P.S以下の `FileDeletingTasklet`の例は、http://static.springsource.org/spring-batch/trunk/spring-batch-samples/[Spring Batch samples]プロジェクトから取得しました。
1.タスクレットの例
`Tasklet`インタフェースを実装し、指定されたディレクトリ内のすべてのファイルを削除するJavaクラスです。
FileDeletingTasklet.java
package com.mkyong.tasklet; import java.io.File; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.UnexpectedJobExecutionException; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.io.Resource; import org.springframework.util.Assert; public class FileDeletingTasklet implements Tasklet, InitializingBean { private Resource directory; @Override public void afterPropertiesSet() throws Exception { Assert.notNull(directory, "directory must be set"); } @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { File dir = directory.getFile(); Assert.state(dir.isDirectory()); File[]files = dir.listFiles(); for (int i = 0; i < files.length; i++) { boolean deleted = files[i].delete(); if (!deleted) { throw new UnexpectedJobExecutionException( "Could not delete file " + files[i].getPath()); } else { System.out.println(files[i].getPath() + " is deleted!"); } } return RepeatStatus.FINISHED; } public Resource getDirectory() { return directory; } public void setDirectory(Resource directory) { this.directory = directory; } }
2.バッチジョブ
次の手順を実行するバッチジョブ。
spring-batch-job.xml
<job id="readMultiFileJob" xmlns="http://www.springframework.org/schema/batch"> <step id="step1" next="deleteDir"> <tasklet> <chunk reader="multiResourceReader" writer="flatFileItemWriter" commit-interval="1"/> </tasklet> </step> <step id="deleteDir"> <tasklet ref="fileDeletingTasklet"/> </step> </job> <bean id="fileDeletingTasklet" class="com.mkyong.tasklet.FileDeletingTasklet" > <property name="directory" value="file:csv/inputs/"/> </bean> <bean id="multiResourceReader" class=" org.springframework.batch.item.file.MultiResourceItemReader"> <property name="resources" value="file:csv/inputs/domain-** .csv"/> <property name="delegate" ref="flatFileItemReader"/> </bean>
ソースコードをダウンロードする
ダウンロードする –
SpringBatch-Tasklet-Example.zip
(13 KB)
参考文献
バッチタスクレットステップ]。
http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/core/step/tasklet/Tasklet.html
[Tasklet
JavaDoc]。
http://static.springsource.org/spring-batch/trunk/spring-batch-samples/
[Spring
バッチサンプル]