Рубрики
Без рубрики

Весенняя Партия Привет, Мир Пример

– Весенняя Партия Привет, Мир Пример

Spring Batch – это платформа для пакетной обработки – выполнения ряда заданий. В пакете Spring задание состоит из множества шагов, и каждый шаг состоит из ЧТЕНИЯ-ОБРАБОТКИ-ЗАПИСИ задачи или одной операции задачи (тасклета).

  1. Для процесса “ЧТЕНИЕ-ОБРАБОТКА-ЗАПИСЬ” это означает “чтение” данных из ресурсов (csv, xml или базы данных), “обработку” и “запись” их в другие ресурсы (csv, xml и базу данных). Например, шаг может считывать данные из CSV-файла, обрабатывать их и записывать в базу данных. Spring Batch предоставляет множество готовых классов для чтения/записи CSV, XML и базы данных.
  2. Для “одиночной” задачи операции (тасклета) это означает выполнение только одной задачи, например, очистку ресурсов после или до запуска или завершения шага.
  3. И шаги могут быть соединены вместе, чтобы выполняться как работа.
1 Job = Many Steps.
1 Step = 1 READ-PROCESS-WRITE or 1 Tasklet.
Job = {Step 1 -> Step 2 -> Step 3} (Chained together) 

Примеры весенних партий

Рассмотрите следующие пакетные задания:

  1. Шаг 1 – Прочитайте CSV-файлы из папки A, обработайте, запишите их в папку B. “ЧТЕНИЕ-ОБРАБОТКА-ЗАПИСЬ”
  2. Шаг 2 – Прочитайте CSV-файлы из папки B, обработайте, запишите их в базу данных.” ЧТЕНИЕ-ОБРАБОТКА-ЗАПИСЬ”
  3. Шаг 3 – Удалите файлы CSB из папки B. “Тасклет”
  4. Шаг 4 – Считывание данных из базы данных, обработка и создание статистического отчета в формате XML, запись его в папку C. “ЧТЕНИЕ-ОБРАБОТКА-ЗАПИСЬ”
  5. Шаг 5 – Прочитайте отчет и отправьте его менеджеру по электронной почте. “Тасклет”

В весенней партии мы можем объявить следующее:

  
	
	  
		
	  
	
	
	  
		
	  
	
	
	  
	
	
	  
		
	  
	
	
		
	
  

Все задания и выполнение шагов хранятся в базе данных, что позволяет перезапустить неудачный шаг там, где он был неудачным, нет необходимости начинать все задание заново.

1. Руководство

В этом учебном пособии по весеннему пакету мы покажем вам, как создать задание, прочитать CSV-файл, обработать его, записать выходные данные в XML-файл.

Используемые инструменты и библиотеки

  1. Мавен 3
  2. Затмение 4.2
  3. JDK 1.6
  4. Пружинный сердечник 3.2.2.ВЫСВОБОЖДЕНИЕ
  5. Пружина OXM 3.2.2. ВЫПУСК
  6. Весенний JDBC 3.2.2.ВЫПУСК
  7. Весенняя партия 2.2.0.ВЫПУСК

2. Каталог проектов

Просмотрите окончательный каталог проектов, стандартный проект Maven.

3. Зависимости проекта

У них должны быть зависимости только от Spring Core, Spring Batch и JDK 1.5. Прочитайте комментарии для пояснения.


	4.0.0
	com.mkyong
	SpringBatchExample
	jar
	1.0-SNAPSHOT
	SpringBatchExample
	http://maven.apache.org

	
		1.6
		3.2.2.RELEASE
		2.2.0.RELEASE
		5.1.25
		4.11
	

	

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

		
		
			org.springframework
			spring-jdbc
			${spring.version}
		

		
		
			org.springframework
			spring-oxm
			${spring.version}
		

		
		
			mysql
			mysql-connector-java
			${mysql.driver.version}
		

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

		
		
			org.springframework.batch
			spring-batch-test
			${spring.batch.version}
		
		
		
		
			junit
			junit
			${junit.version}
			test
		

	
	
		spring-batch
		
			
				org.apache.maven.plugins
				maven-eclipse-plugin
				2.9
				
					true
					false
				
			
			
				org.apache.maven.plugins
				maven-compiler-plugin
				2.3.2
				
					${jdk.version}
					${jdk.version}
				
			
		
	

4. Весенние пакетные Задания

Файл CSV.

1001,"213,100",980,"mkyong", 29/7/2013
1002,"320,200",1080,"staff 1", 30/7/2013
1003,"342,197",1200,"staff 2", 31/7/2013

Пакетное задание Spring для чтения вышеуказанного csv-файла с помощью FlatFileItemReader , обработки данных с помощью ItemProcessor и записи их в XML-файл с помощью StaxEventItemWriter .



	
	

	
	

	
	  
		
			
			
		
	  
	

	

		

		
		    
			
				
					
				
			
			
				
				    
				 
			
		    
		

	

	
		
		
		
	

	
	   
		
			com.mkyong.model.Report
		
	    
	


Сопоставьте значение CSV с Отчет объект и запишите его в XML-файл (с помощью аннотаций jaxb).

package com.mkyong.model;

import java.math.BigDecimal;
import java.util.Date;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "record")
public class Report {

	private int id;
	private BigDecimal sales;
	private int qty;
	private String staffName;
	private Date date;

	@XmlAttribute(name = "id")
	public int getId() {
		return id;
	}

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

	@XmlElement(name = "sales")
	public BigDecimal getSales() {
		return sales;
	}

	public void setSales(BigDecimal sales) {
		this.sales = sales;
	}

	@XmlElement(name = "qty")
	public int getQty() {
		return qty;
	}

	public void setQty(int qty) {
		this.qty = qty;
	}

	@XmlElement(name = "staffName")
	public String getStaffName() {
		return staffName;
	}

	public void setStaffName(String staffName) {
		this.staffName = staffName;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	@Override
	public String toString() {
		return "Report [id=" + id + ", sales=" + sales 
                    + ", qty=" + qty + ", staffName=" + staffName + "]";
	}

}

Чтобы преобразовать Дата , вам нужен пользовательский FieldSetMapper . Если преобразование типов данных не выполняется, просто используйте BeanWrapperFieldSetMapper для автоматического сопоставления значений по имени.

package com.mkyong;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.springframework.batch.item.file.mapping.FieldSetMapper;
import org.springframework.batch.item.file.transform.FieldSet;
import org.springframework.validation.BindException;

import com.mkyong.model.Report;

public class ReportFieldSetMapper implements FieldSetMapper {

	private SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
	
	@Override
	public Report mapFieldSet(FieldSet fieldSet) throws BindException {
		
		Report report = new Report();
		report.setId(fieldSet.readInt(0));
		report.setSales(fieldSet.readBigDecimal(1));
		report.setQty(fieldSet.readInt(2));
		report.setStaffName(fieldSet.readString(3));
		
		//default format yyyy-MM-dd
		//fieldSet.readDate(4);
		String date = fieldSet.readString(4);
		try {
			report.setDate(dateFormat.parse(date));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return report;
		
	}

}

ItemProcessor будет запущен перед ItemWriter.

package com.mkyong;

import org.springframework.batch.item.ItemProcessor;
import com.mkyong.model.Report;

public class CustomItemProcessor implements ItemProcessor {

	@Override
	public Report process(Report item) throws Exception {
		
		System.out.println("Processing..." + item);
		return item;
	}

}

Контекст Spring и конфигурация базы данных.



	
	
 	 
 	 
	
		
		
		
	
	
	
	 
	
		
	




        
	
		
		
		
		
	

	
	
	
	
		
		
	
	

Оригинал: “https://mkyong.com/spring-batch/spring-batch-hello-world-example/”