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
バッチサンプル]