Exemple de tâche Spring Batch

Exemple de Tasklet Spring Batch

Dans Spring batch, leTasklet est une interface, qui sera appelée pour effectuer une seule tâche uniquement, comme nettoyer ou configurer des ressources avant ou après l'exécution de toute étape. Dans cet exemple, nous allons vous montrer comment utiliserTasklet pour nettoyer la ressource (les dossiers) après la fin d'un travail par lots.

P.S The FileDeletingTasklet example below is taken from the Spring Batch samples project.

1. Exemple de Tasklet

Une classe Java pour implémenter l'interfaceTasklet et supprimer tous les fichiers dans le répertoire donné.

FileDeletingTasklet.java

package com.example.tasklet;

import java.io.File;

import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.UnexpectedJobExecutionException;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;
import org.springframework.util.Assert;

public class FileDeletingTasklet implements Tasklet, InitializingBean {

  private Resource directory;

  @Override
  public void afterPropertiesSet() throws Exception {
    Assert.notNull(directory, "directory must be set");
  }

  @Override
  public RepeatStatus execute(StepContribution contribution,
               ChunkContext chunkContext) throws Exception {

    File dir = directory.getFile();
    Assert.state(dir.isDirectory());

    File[] files = dir.listFiles();
    for (int i = 0; i < files.length; i++) {
      boolean deleted = files[i].delete();
      if (!deleted) {
        throw new UnexpectedJobExecutionException(
                       "Could not delete file " + files[i].getPath());
      } else {
            System.out.println(files[i].getPath() + " is deleted!");
      }
    }
    return RepeatStatus.FINISHED;
  }

  public Resource getDirectory() {
    return directory;
  }

  public void setDirectory(Resource directory) {
    this.directory = directory;
  }

}

2. Emplois par lots

Un travail par lots pour effectuer les étapes suivantes:

Step 1 - Pour lire plusieurs fichiers decsv/inputs/ et les écrire quelque part.
Step 2 - Une fois l'étape 1 terminée, exécutezfileDeletingTasklet pour supprimer tous les fichiers du répertoirecsv/inputs/.

spring-batch-job.xml

  
    
      
        
      
    
    
        
    
  

  
    
  

  
    
    
  

Télécharger le code source

Téléchargez-le -SpringBatch-Tasklet-Example.zip (13 Ko)