Spring Batch Taskletの例
Springバッチでは、Taskletはインターフェースであり、ステップ実行の前後にリソースをクリーンアップまたはセットアップするなど、単一のタスクのみを実行するために呼び出されます。 この例では、バッチジョブの完了後にTaskletを使用してリソース(フォルダー)をクリーンアップする方法を示します。
P.S The FileDeletingTasklet example below is taken from the Spring Batch samples project.
1. タスクレットの例
Taskletインターフェースを実装し、指定されたディレクトリー内のすべてのファイルを削除するJavaクラス。
FileDeletingTasklet.java
package com.example.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. バッチジョブ
次の手順を実行するバッチジョブ:
Step 1-csv/inputs/から複数のファイルを読み取り、どこかに書き込むには。
Step 2-手順1が完了したら、fileDeletingTaskletを実行してすべてのファイルを削除します。ディレクトリcsv/inputs/からのファイル。
spring-batch-job.xml
ソースコードをダウンロード
ダウンロード-SpringBatch-Tasklet-Example.zip(13 KB)