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)