Spring Batch Hello World Beispiel

Spring Batch Hello World Beispiel

Spring Batch ist ein Framework für die Stapelverarbeitung - Ausführung einer Reihe von Jobs. In Spring Batch besteht ein Job aus vielen Schritten und jeder Schritt besteht aus einerREAD-PROCESS-WRITE-Aufgabe oder einer "+ Einzeloperation +" -Aufgabe (Aufgabe).

  1. Beim Prozess "READ-PROCESS-WRITE" werden Daten aus den Ressourcen (CSV, XML oder Datenbank) "gelesen", verarbeitet und in andere Ressourcen (CSV, XML und Datenbank) "geschrieben". Beispielsweise kann ein Schritt Daten aus einer CSV-Datei lesen, verarbeiten und in die Datenbank schreiben. Spring Batch bietet viele erstellte Klassen zum Lesen / Schreiben von CSV, XML und Datenbanken.

  2. Bei einer „einzelnen“ Operationstask (Tasklet) bedeutet dies, dass nur eine einzelne Task ausgeführt wird, z. B. das Bereinigen der Ressourcen nach oder vor dem Starten oder Fertigstellen eines Schritts.

  3. Und die Schritte können verkettet werden, um als Job ausgeführt zu werden.

1 Job = Many Steps.
1 Step = 1 READ-PROCESS-WRITE or 1 Tasklet.
Job = {Step 1 -> Step 2 -> Step 3} (Chained together)

Frühlings-Batch-Beispiele

Betrachten Sie folgende Batch-Jobs:

  1. Schritt 1 - CSV-Dateien aus Ordner A lesen, verarbeiten und in Ordner B schreiben "READ-PROCESS-WRITE"

  2. Schritt 2 - CSV-Dateien aus Ordner B lesen, verarbeiten und in die Datenbank schreiben. "READ-PROCESS-WRITE"

  3. Schritt 3 - Löschen Sie die CSB-Dateien aus Ordner B. "Tasklet"

  4. Schritt 4 - Daten aus einer Datenbank lesen, Statistikberichte im XML-Format verarbeiten und generieren, in Ordner C schreiben "READ-PROCESS-WRITE"

  5. Schritt 5 - Lesen Sie den Bericht und senden Sie ihn an die E-Mail-Adresse des Managers. "Tasklet"

In Spring Batch können wir wie folgt deklarieren:

  
    
      
        
      
    
    
      
        
      
    
    
      
    
    
      
        
      
    
    
        
    
  

Die gesamte Ausführung von Jobs und Schritten wird in einer Datenbank gespeichert, sodass der fehlgeschlagene Schritt an der Stelle, an der er fehlgeschlagen ist, neu gestartet werden kann, ohne dass der gesamte Job neu gestartet werden muss.

1. Lernprogramm

In diesem Spring Batch-Tutorial zeigen wir Ihnen, wie Sie einen Job erstellen, eine CSV-Datei lesen, verarbeiten und die Ausgabe in eine XML-Datei schreiben.

Verwendete Tools und Bibliotheken

  1. Maven 3

  2. Eclipse 4.2

  3. JDK 1.6

  4. Federkern 3.2.2.FREIGABE

  5. Spring OXM 3.2.2.RELEASE

  6. Spring JDBC 3.2.2.RELEASE

  7. Spring Batch 2.2.0.RELEASE

2. Projektverzeichnis

Überprüfen Sie das endgültige Projektverzeichnis, ein Standard-Maven-Projekt.

spring-batch-hello-world-directory

3. Projektabhängigkeiten

Abhängigkeiten müssen nur Spring Core, Spring Batch und JDK 1.5 sein. Lesen Sie Kommentare, um sich selbst zu erklären.

pom.xml


    4.0.0
    com.example
    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. Spring Batch-Jobs

Eine CSV-Datei.

report.csv

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

Ein Spring-Batch-Job zum Lesen der obigen CSV-Datei mitFlatFileItemReader verarbeitet die Daten mititemProcessor und schreibt sie mitStaxEventItemWriter in eine XML-Datei
.

job-hello-world.xml



    
    

    
    

    
      
        
            
            
        
      
    

    

        

        
            
            
                
                    
                
            
            
                

                 
            
            
        

    

    
        
        
        
    

    
       
        
            com.example.model.Report
        
        
    

Ordnen Sie den CSV-Wert dem Objekt vonReportzu und schreiben Sie ihn in eine XML-Datei (über Jaxb-Annotationen).

Report.java

package com.example.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 + "]";
    }

}

Um einDate zu konvertieren, benötigen Sie ein benutzerdefiniertesFieldSetMapper. Wenn keine Datentypkonvertierung erfolgt, verwenden Sie einfachBeanWrapperFieldSetMapper, um die Werte automatisch nach Namen zuzuordnen.

ReportFieldSetMapper.java

package com.example;

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.example.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;

    }

}

Ein itemProcessor wird vor itemWriter ausgelöst.

CustomItemProcessor.java

package com.example;

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

public class CustomItemProcessor implements ItemProcessor {

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

        System.out.println("Processing..." + item);
        return item;
    }

}

Spring-Kontext und Datenbankkonfiguration.

context.xml



    
    

     
    
        
        
        
    

    

    
        
    

database.xml



        
    
        
        
        
        
    

    

    
    
        
        
    

5. Starte es

Die einfachste Möglichkeit, einen Stapeljob auszuführen.

package com.example;

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/jobs/job-hello-world.xml"
        };

    ApplicationContext context =
            new ClassPathXmlApplicationContext(springConfig);

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

    try {

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

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

    System.out.println("Done");

  }
}

Ausgabe

report.xml



    
        2013-07-29T00:00:00+08:00
        980
        213100
        example
    
    
        2013-07-30T00:00:00+08:00
        1080
        320200
        staff 1
    
    
        2013-07-31T00:00:00+08:00
        1200
        342197
        staff 2
    

In der Konsole

Jul 30, 2013 11:52:00 PM org.springframework.batch.core.launch.support.SimpleJobLauncher$1 run
INFO: Job: [FlowJob: [name=helloWorldJob]] launched with the following parameters: [{}]
Jul 30, 2013 11:52:00 PM org.springframework.batch.core.job.SimpleStepHandler handleStep
INFO: Executing step: [step1]
Processing...Report [id=1001, sales=213100, qty=980, staffName=example]
Processing...Report [id=1002, sales=320200, qty=1080, staffName=staff 1]
Processing...Report [id=1003, sales=342197, qty=1200, staffName=staff 2]
Jul 30, 2013 11:52:00 PM org.springframework.batch.core.launch.support.SimpleJobLauncher$1 run
INFO: Job: [FlowJob: [name=helloWorldJob]] completed with the following parameters: [{}] and the following status: [COMPLETED]
Exit Status : COMPLETED
Done

Quellcode herunterladen

Laden Sie es herunter -SpringBatch-Hello-World-Example.zip (27 kb)