Spring batch Tasklet 例子(源码下载)

摘要: 在spring batch里面, Tasklet 是一个接口. 通常被调用去执行单个任务, 比如在在一个step之前或之后执行某一些动作, 作为测试,做了一个在一个job完成之后删除掉一些资源文件. 这个例子 FileDeletingTasklet  其实也可以在 spring batch  官方的例子中找到。

在spring batch里面, Tasklet 是一个接口. 通常被调用去执行单个任务, 比如在在一个step之前或之后执行某一些动作, 作为测试,做了一个在一个job完成之后删除掉一些资源文件. 这个例子 FileDeletingTasklet 其实也可以在 spring batch 官方的例子中找到。

1. 首先实现 Tasklet接口

package com.yihaomen.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. batch job 的定义:
有如下步骤:1, 从csv/inputs文件夹中读取多个文件,然后写到output文件夹中去。2. 在第一步完成之后,运行 fileDeletingTasklet 删除文件夹 csv/inputs

		
			
				
			
		
		
		    
		
	

	
		
		
	

	

		
			

				
					
						
					
				
				
					
						
					
				
			
		

	


运行,得到如下结果:
INFO: Executing step: [deleteDir]
csv\inputs\domain-1-3-2013.csv is deleted!
csv\inputs\domain-2-3-2013.csv is deleted!
csv\inputs\domain-3-3-2013.csv is deleted!
十二月 04, 2013 7:43:50 下午 org.springframework.batch.core.launch.support.SimpleJobLauncher$1 run
INFO: Job: [FlowJob: [name=readMultiFileJob]] completed with the following parameters: [{}] and the following status: [COMPLETED]
Exit Status : COMPLETED
Exit Status : []
Done


注意事项,必须的jar包参考 上一篇文章: spring batch入门教程
在这个例子中,使用的是内存方式,不是数据库方式,另外在执行之前先删除outpus下的文件. 然后在运行app.java 中的main 方法,就可以得到上面的结果了。整个工程如下:



源代码下载:
Spring batch Tasklet 例子

上一篇: Spring batch 入门学习教程(附源码)
下一篇: 命令行方式下运行spring batch 程序
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号