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

Пример Пакета Spring – XML-Файл В CSV Файл

– Пример Пакета Spring – XML-Файл В CSV Файл

В этом руководстве мы покажем вам, как настроить пакетное задание Spring для чтения XML-файла ( JAXB2 библиотека) в файл csv и отфильтровать запись перед записью с помощью ItemProcessor .

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

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

P.S Этот пример – XML-файл (считыватель) – фильтрация (ItemProcessor) – CSV (запись).

1. Простой Проект Java

1. Создайте быстрый запуск Java-проекта с помощью Maven, преобразуйте и импортируйте его в среду разработки Eclipse.

$ mvn archetype:generate -DgroupId=com.mkyong -DartifactId=SpringBatchExample3 
  -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
$ cd SpringBatchExample3/
$ mvn eclipse:eclipse

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

Объявляет все зависимости проекта в pom.xml


	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
	

	

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

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

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

	
	
	    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}
			
		
	    
	


3. Структура каталогов проектов

Просмотрите окончательную структуру проекта, получите общее представление о том, что будет происходить дальше.

4. XML-файл



    
        mkyong
        31
        31/8/1982
        200,000
    
    
        kkwong
        30
        26/7/1983
        100,999
    
    
        joel
        29
        21/8/1984
        1,000,000
    
    
        leeyy
        29
        21/3/1984
        80,000.89
    

5. Прочитать XML-файл

В этом примере мы используем Jaxb2Marshaller для сопоставления XML-значений и атрибутов с объектом.

    
    
	
	
	
    

    
    
	
	  
		com.mkyong.model.Report
	  
	
    

Сделайте пометку в Отчете , чтобы указать, какое значение XML соответствует какому полю.

package com.mkyong.model;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import com.mkyong.adapter.JaxbBigDecimalAdapter;
import com.mkyong.adapter.JaxbDateAdapter;

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

	private int refId;
	private String name;
	private int age;
	private Date dob;
	private BigDecimal income;

	@XmlAttribute(name = "refId")
	public int getRefId() {
		return refId;
	}

	public void setRefId(int refId) {
		this.refId = refId;
	}

	@XmlElement(name = "age")
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@XmlElement
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@XmlJavaTypeAdapter(JaxbDateAdapter.class)
	@XmlElement
	public Date getDob() {
		return dob;
	}

	public void setDob(Date dob) {
		this.dob = dob;
	}

	@XmlJavaTypeAdapter(JaxbBigDecimalAdapter.class)
	@XmlElement
	public BigDecimal getIncome() {
		return income;
	}

	public void setIncome(BigDecimal income) {
		this.income = income;
	}

	// for csv file only
	public String getCsvDob() {

		SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		return dateFormat.format(getDob());

	}

}

В JAXB2 эти “сложные” типы данных, такие как Дата и BigDecimal , не будет автоматически сопоставляться с полем, даже если оно аннотировано.

Чтобы сделать поддержку JAXB2 Дата преобразования, вам необходимо создать пользовательский адаптер для обработки Формата даты вручную, затем подключить адаптер через @XmlJavaTypeAdapter .

package com.mkyong.adapter;

import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;


public class JaxbDateAdapter extends XmlAdapter {

	private SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");

	@Override
	public String marshal(Date date) throws Exception {
		return dateFormat.format(date);
	}

	@Override
	public Date unmarshal(String date) throws Exception {
		return dateFormat.parse(date);
	}

}

То же самое для BigDecimal , запятые “,” в элементе дохода XML вызывают проблему преобразования, вам также нужен пользовательский адаптер для ее обработки.

package com.mkyong.adapter;

import java.math.BigDecimal;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class JaxbBigDecimalAdapter extends XmlAdapter {

	@Override
	public String marshal(BigDecimal obj) throws Exception {
		return obj.toString();
	}

	@Override
	public BigDecimal unmarshal(String obj) throws Exception {
		return new BigDecimal(obj.replaceAll(",", ""));
	}

}

6. Установка Сердечника Пружинной партии

Определить Место работы и Безработный .



     
    
	
    
 	
    
	
 
    
	
    


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

Пакетное задание Spring, прочитайте report.xml файл, сопоставьте его с Отчетом объектом и запишите его в файл csv. Прочитайте комментарии, это должно быть понятно само собой.



  
	
	
		
		
	
	
  

  
  

  
	
	
	
  

  
  
    
	
		com.mkyong.model.Report
	
    
  

  
	
	
	

	
	  
		
		
		  
			
		   
		
	   
	
  


8. Весенний пакет – обработчик элементов

В весеннем пакете проводной процессор будет запущен перед записью на какие-либо ресурсы, поэтому это лучшее место для обработки любых преобразований, фильтрации и бизнес-логики. В этом примере объект Report будет проигнорирован (не будет записан в файл csv), если его возраст равен 30.

package com.mkyong.processor;

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

//run before writing
public class FilterReportProcessor implements ItemProcessor {

	@Override
	public Report process(Report item) throws Exception {

		//filter object which age = 30
		if(item.getAge()==30){
			return null; // null = ignore this object
		}
		return item;
	}

}

9. Запустите Его

Самый простой способ запуска пакетного задания.

package com.mkyong;

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.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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

	String[] springConfig  = 
	{	
		"spring/batch/config/context.xml",
		"spring/batch/jobs/job-report.xml" 
	};
		
	ApplicationContext context = 
		new ClassPathXmlApplicationContext(springConfig);
		
	JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
	Job job = (Job) context.getBean("reportJob");

	try {

		JobExecution execution = jobLauncher.run(job, new JobParameters());
		System.out.println("Exit Status : " + execution.getStatus());

	} catch (Exception e) {
		e.printStackTrace();
	}

	System.out.println("Done");

  }
}

Выход. Значения XML вставляются в файл csv.

1001,mkyong,31,31/08/1982,200000
1003,joel,29,21/08/1984,1000000
1004,leeyy,29,21/03/1984,80000.89

Скачать Исходный Код

Рекомендации

  1. Средство чтения и записи элементов весеннего пакета
  2. Пользовательская привязка JAXB – Java.util. Дата
  3. Как использовать FlatFileItemWriter?
  4. Средство записи плоских файлов Явадок

Оригинал: “https://mkyong.com/spring-batch/spring-batch-example-xml-file-to-csv-file/”