Descripción del Problema
Cómo leer registros de múltiples ficheros (en este caso usaremos ficheros CSV), y escribir los diferentes registros en un sólo fichero csv.
Ficheros
Para ilustrar el caso, os proporciono 3 ficheros: domain-1-3-2013.csv, domain-2-3-2013.csv, domain-3-3-2013.csv
csv/inputs/domain-1-3-2013.csv
1,facebook.com 2,yahoo.com 3,google.com
csv/inputs/domain-2-3-2013.csv
200,wherever.com 300,stackoverflow.com 400,oracle.com
csv/inputs/domain-3-3-2013.csv
999,eclipse.org 888,baidu.com
CLASE
Se requiere una clase que servirá para almacenar temporalmente los dos campos de cada linea del fichero.package com.ejemplo; public class Domain { int id; String domain; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; } }
Configuración del Job de Spring
Solo se necesita la siguiente configuración en spring-batchjob-merge-files.xml
Configuración del Contexto de Spring-Batch
Este fichero suele cambiar según la configuración que quieras hacer con spring-batch, les facilito la parte más básica.
context.xml
Clase para ejecutar el job
Se requiere una clase que servirá para ejecutar el job.
package com.ejemplo; 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) { App obj = new App(); obj.run(); } private void run() { String[] springConfig = { "spring/batch/jobs/job-merge-files.xml" }; ApplicationContext context = new ClassPathXmlApplicationContext(springConfig); JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher"); Job job = (Job) context.getBean("readMultiFileJob"); try { JobExecution execution = jobLauncher.run(job, new JobParameters()); System.out.println("Exit Status : " + execution.getStatus()); } catch (Exception e) { e.printStackTrace(); } System.out.println("Done"); } }
RESULTADO
Al ejecutar el batch, la salida esperada será un fichero llamado domain.all.csv con la combinación de los registros de los tres ficheros csv de entrada.csv/outputs/domain.all.csv
1,facebook.com 2,yahoo.com 3,google.coms 200,mkyong.com 300,stackoverflow.com 400,oracle.com 999,eclipse.org 888,baidu.com
No hay comentarios:
Publicar un comentario