Spring Batch Beispiel für Spring TaskScheduler

Beispiel für Spring Batch + Spring TaskScheduler

In diesem Tutorial zeigen wir Ihnen, wie Sie mitSpring TaskScheduler einen Stapeljob planen, der alle 5 Sekunden ausgeführt wird.

Verwendete Tools und Bibliotheken

  1. Maven 3

  2. Eclipse 4.2

  3. JDK 1.6

  4. Federkern 3.2.2.FREIGABE

  5. Spring Batch 2.2.0.RELEASE

1. Projektverzeichnisstruktur

Ein Standard-Maven-Projekt.

spring-batch-taskscheduler

2. Spring TaskScheduler

In Spring 3.0 wird einTaskScheduler für die Planung von Aufgaben eingeführt. Es ist Teil des Spring-Core und muss keine zusätzliche Abhängigkeit deklariert werden.

  
    
  

  
    
  

DieTaskScheduler werden so geplant, dass sie unter Bean ausgeführt werden.

RunScheduler.java

package com.example;

import java.util.Date;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class RunScheduler {

  @Autowired
  private JobLauncher jobLauncher;

  @Autowired
  private Job job;

  public void run() {

    try {

    String dateParam = new Date().toString();
    JobParameters param =
      new JobParametersBuilder().addString("date", dateParam).toJobParameters();

    System.out.println(dateParam);

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

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

  }
}

P.S JobParamater need to be unique each time a batch job to run, for testing purpose, we just pass in a new Date() everything running the job.

3. Spring Batch-Jobs

Dieser Job liest nur eine CSV-Datei und zeigt den Wert über einen benutzerdefinierten Writer an. Beziehen Sie sich auf das Ende der Datei. Wir verwendentask:scheduled-tasks, um diesen Stapeljob alle 5 Sekunden auszuführen.

resources/spring/batch/jobs/job-report.xml



  

  
  
    
  

  

  
    
  
  

  

  

  
    
      
        
        
      
    
   

  

    
    

    
      
        
          
            
          
        
        
          
            
          
        
      
    

  

  

  
  
    
    
   

report.csv

1,"139,237"
2,"500,657"
3,"342,100"

CustomWriter.java

package com.example.writers;

import java.util.List;
import org.springframework.batch.item.ItemWriter;
import com.example.model.Report;

public class CustomWriter implements ItemWriter {

  @Override
  public void write(List items) throws Exception {

    System.out.println("writer..." + items.size());
    for(Report item : items){
        System.out.println(item);
    }

  }

}

4. Starte es

Lädt den Spring-Anwendungskontext, wird der Scheduler automatisch ausgeführt.

App.java

package com.example;

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-report.xml";

    ApplicationContext context = new ClassPathXmlApplicationContext(springConfig);

  }
}

Bei der Ausgabe wird der CSV-Inhalt alle 5 Sekunden gedruckt.

......
Sun Jul 28 11:20:30 MYT 2013
Jul 28, 2013 11:20:30 AM org.springframework.batch.core.launch.support.SimpleJobLauncher$1 run
INFO: Job: [FlowJob: [name=reportJob]] launched with the following parameters: [{date=Sun Jul 28 11:20:30 MYT 2013}]
Jul 28, 2013 11:20:30 AM org.springframework.batch.core.job.SimpleStepHandler handleStep
INFO: Executing step: [step1]
writer...3
Report [id=1, Impressions=139,237]
Report [id=2, Impressions=500,657]
Report [id=3, Impressions=342,100]
Jul 28, 2013 11:20:30 AM org.springframework.batch.core.launch.support.SimpleJobLauncher$1 run
INFO: Job: [FlowJob: [name=reportJob]] completed with the following parameters: [{date=Sun Jul 28 11:20:30 MYT 2013}] and the following status: [COMPLETED]
Exit Status : COMPLETED

Sun Jul 28 11:20:35 MYT 2013
Jul 28, 2013 11:20:35 AM org.springframework.batch.core.launch.support.SimpleJobLauncher$1 run
INFO: Job: [FlowJob: [name=reportJob]] launched with the following parameters: [{date=Sun Jul 28 11:20:35 MYT 2013}]
Jul 28, 2013 11:20:35 AM org.springframework.batch.core.job.SimpleStepHandler handleStep
INFO: Executing step: [step1]
writer...3
Report [id=1, Impressions=139,237]
Report [id=2, Impressions=500,657]
Report [id=3, Impressions=342,100]
Exit Status : COMPLETED
Jul 28, 2013 11:20:35 AM org.springframework.batch.core.launch.support.SimpleJobLauncher$1 run
INFO: Job: [FlowJob: [name=reportJob]] completed with the following parameters: [{date=Sun Jul 28 11:20:35 MYT 2013}] and the following status: [COMPLETED]
......

Quellcode herunterladen

Laden Sie es herunter -SpringBatch-TaskScheduler-Example.zip (18 kb)