Répéter l'Étape x fois dans Spring Batch

Je suis à l'aide de Spring Batch 3.0.3 configuré avec l'annotation pour créer un lot de travail qui se répète d'une étape d'un nombre indéterminé de fois.

Ma première étape sera lu en mémoire une liste des éléments utilisés lors de la répétition de l'étape. Je voudrais répéter les étapes pour effectuer une itération à travers ce travail d'étendue de liste.

Comment puis-je configurer mon travail à exécuter la même opération x fois? J'ai vu des exemples en xml d'une étape de spécification de l'étape suivante à exécuter. Je suis en train de penser que je pouvais le point deux pas les uns des autres dans une boucle infinie jusqu'à ce que la liste a été réitéré. Serait-il et est-il un moyen de le faire avec des annotations? Ci-dessous mon fichier de configuration principal avec un code qui ne fonctionnait pas.

@ComponentScan(excludeFilters = @Filter(IgnoreDuringScan.class))
@EnableAutoConfiguration
@EnableBatchProcessing
@Loggable
public class BatchCrudConfiguration
{
    @Bean
    public Job batchCRUDJob(JobBuilderFactory jobBuilderFactory, Step[] processSheetSteps)
    {
        JobBuilder jobBuilder = jobBuilderFactory.get("batchCRUDJob").incrementer(new RunIdIncrementer());
        FlowBuilder<FlowJobBuilder> jobFlowBuilder = jobBuilder.flow(processSheetSteps[0]);
        for (int i = 1; i < processSheetSteps.length; i++)
        {
            jobFlowBuilder = jobFlowBuilder.next(processSheetSteps[i]);
        }
        return jobFlowBuilder.end().build();
    }

    @Bean
    public Step[] processSheetSteps(
            StepBuilderFactory stepBuilderFactory,
            RawDataReader[] readers,
            DelegatingWriter writer,
            DelegatingProcessor processor,
            @Value("${batchcrud.chunkSize}") int chunkSize)
    {
        int numberOfReaders = readers.length;
        Step[] steps = new Step[numberOfReaders];
        for (int i = 0; i < numberOfReaders; i++)
        {
            steps[i] = stepBuilderFactory.get("processSheet" + i + "Step").<RawData, DataItem>
                    chunk(chunkSize).reader(readers[i]).processor(processor).writer(writer).build();
        }
        return steps;
    }
Si vous incluez votre configuration, nous pouvons fournir plus de réponse concrète.
Vous ne serait pas arriver à être le Michael Minella qui a écrit le livre Spring Batch je lisais la nuit dernière? J'ai ajouté un peu de code.
Si le livre que vous êtes en train de lire est Pro Spring Batch...je suis.
Donc, il n'y a pas assez de code pour moi d'obtenir une compréhension complète de ce que vous essayez de faire. Mais, à partir d'un niveau élevé, si vous voulez répéter une étape, alors vous devriez être capable de l'écrire comme une boucle. Créer l'étape 1 pour charger votre liste. Étape 2 les processus d'un élément dans la liste. L'étape 2 a un auditeur qui détermine s'il y a plus d'éléments à traiter dans la liste. Si oui, puis il renvoie le code de sortie qui correspond à revenir à la même étape. Si non, puis il renvoie le code de sortie pour continuer dans le flux (ou à la fin du travail).
Merci pour la réponse. Comment pourrais-je le code de l'étape 2 de répéter lui-même, sans l'aide de xml? Serait l'auditeur être de classe JobExecutionDecider? Renvoyer un tableau des étapes de mon beau bean ne semble pas fonctionner.

OriginalL'auteur Chris Oppedal | 2015-03-26