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