Spring Batch: Intro I -- Tasklet & Read-Process-Write example

阅读更多

1. Intro to Spring Batch

    1) Spring Batch is a framework for Batch Processing - Execution of a series of Jobs.

    2) Each "Job" contains many "Steps". And one "Step" can be a single "tasklet" or a "READ-PROCESS-WRITE" task.

 

2. An overview of Spring Batch

 
Spring Batch: Intro I -- Tasklet & Read-Process-Write example_第1张图片

3. Example for Tasklet

    A sample tasklet delete all files under a specific folder.

    context.xml



	

	
		
	

	
		
	

	

    tasklet.xml



	
		
			
		
	
	
		
	

    App.java

package edu.xmu.spring.batch;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {

	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
		new String[] { "spring/batch/config/context.xml" });

	JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
	Job job = (Job) context.getBean("taskletExampleJob");

	JobExecution execution;
	try {
	    execution = jobLauncher.run(job, new JobParameters());
	    System.out.println("Exit Status : " + execution.getStatus());
	} catch (Exception e) {
	    e.printStackTrace();
	}

	System.out.println("Done");

	context.close();
    }
}

    CleanResourceFolderTasklet.java

package edu.xmu.spring.batch.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 CleanResourceFolderTasklet implements Tasklet, InitializingBean {
    private Resource directory;

    @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;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
	Assert.notNull(directory, "directory must be set");
    }

    public Resource getDirectory() {
	return directory;
    }

    public void setDirectory(Resource directory) {
	this.directory = directory;
    }

}

 

4. Example for Job(Read-Process-Write)

    Read from csv and write to csv.

    context.xml



	

	
		
	

	
		
	

	

    job.xml



	
		
			
				
			
		
	

	
		
		
			
				
					
						
					
				
				
					
				
			
		
	

	

	
		
		
			
				
					
						
					
				
			
		
	

    User.java

package edu.xmu.spring.batch.model;

public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
	return id;
    }

    public void setId(int id) {
	this.id = id;
    }

    public String getUsername() {
	return username;
    }

    public void setUsername(String username) {
	this.username = username;
    }

    public String getPassword() {
	return password;
    }

    public void setPassword(String password) {
	this.password = password;
    }

}

 

    UserFieldSetMapper.java

package edu.xmu.spring.batch;

import org.springframework.batch.item.file.mapping.FieldSetMapper;
import org.springframework.batch.item.file.transform.FieldSet;
import org.springframework.validation.BindException;

import edu.xmu.spring.batch.model.User;

public class UserFieldSetMapper implements FieldSetMapper {

    @Override
    public User mapFieldSet(FieldSet fieldSet) throws BindException {
	User user = new User();
	user.setId(fieldSet.readInt("id"));
	user.setUsername(fieldSet.readString("name"));
	user.setPassword(fieldSet.readString("password"));
	return user;

    }
}

    UserCsvItemProcessor.java

package edu.xmu.spring.batch.processor;

import org.springframework.batch.item.ItemProcessor;

import edu.xmu.spring.batch.model.User;

public class UserCsvItemProcessor implements ItemProcessor {

    @Override
    public User process(User item) throws Exception {
	item.setUsername(item.getUsername().replace(',', '-'));
	item.setPassword(item.getPassword().replace(',', '-'));
	return item;
    }

}

    App.java

package edu.xmu.spring.batch;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {

	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
		new String[] { "spring/batch/config/context.xml" });

	JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
	Job job = (Job) context.getBean("readProcessWriteExampleJob");

	JobExecution execution;
	try {
	    execution = jobLauncher.run(job, new JobParameters());
	    System.out.println("Exit Status : " + execution.getStatus());
	} catch (Exception e) {
	    e.printStackTrace();
	}

	System.out.println("Done");

	context.close();
    }
}

    pom.xml


	4.0.0
	edu.xmu.spring.batch
	spring-batch
	0.0.1-SNAPSHOT

	
		3.2.2.RELEASE
		2.2.0.RELEASE
		4.11
	

	
		
		
			org.springframework
			spring-core
			${spring.version}
		
		
		
			org.springframework.batch
			spring-batch-core
			${spring.batch.version}
		
		
			org.springframework.batch
			spring-batch-infrastructure
			${spring.batch.version}
		
	

 

Reference Links:

1) http://www.mkyong.com/spring-batch/

 

  • Spring Batch: Intro I -- Tasklet & Read-Process-Write example_第2张图片
  • 大小: 101.8 KB
  • 查看图片附件

你可能感兴趣的:(Spring,Batch,Spring)