Spring Batch ItemReader liste traitée qu'une seule fois

Je suis en train de créer un Ressort de traitement par Lots à l'aide d'un ListItemReader<String>, ItemProcessor<String, String> et ItemWriter<String>.

Le XML ressemble à celui-ci,

<job id="sourceJob" xmlns="http://www.springframework.org/schema/batch">
    <step id="step1" next="step2">
        <tasklet>
            <chunk reader="svnSourceItemReader" 
                processor="metadataItemProcessor" 
                writer="metadataItemWriter" 
                commit-interval="1" />
        </tasklet>
    </step>
    <step id="step2">
        <tasklet ref="lastRevisionLoggerTasklet"></tasklet>
    </step>
</job>

<bean id="svnSourceItemReader" 
        class="com.example.repository.batch.SvnSourceItemReader" 
        scope="prototype">
    <constructor-arg index="0">
        <list>
            <value>doc1.xkbml</value>
            <value>doc2.xkbml</value>
            <value>doc3.xkbml</value>
        </list>
    </constructor-arg>
</bean>

<bean id="metadataItemProcessor" 
        class="com.example.repository.batch.MetadataItemProcessor" 
        scope="prototype" />

<bean id="metadataItemWriter" 
        class="com.example.repository.batch.MetadataItemWriter" 
        scope="prototype" />

Le lecteur, le processeur et l'écrivain sont à la vanille,

public class SvnSourceItemReader extends ListItemReader<String> {

    public SvnSourceItemReader(List<String> list) {
        super(list);
        System.out.println("Reading data list " + list);
    }

    @Override
    public String read() {
        String out = (String) super.read();
        System.out.println("Reading data " + out);
        return out;
    }

}

public class MetadataItemProcessor implements ItemProcessor<String, String> {

    @Override
    public String process(String i) throws Exception {
        System.out.println("Processing " + i + " : documentId " + documentId);
        return i;
    }

}

public class MetadataItemWriter implements ItemWriter<String> {

    @Override
    public void write(List<? extends String> list) throws Exception {
        System.out.println("Writing " + list);
    }

}

Le travail est commencé comme ça, mais sur un calendrier de toutes les 10 secondes.

long nanoBits = System.nanoTime() % 1000000L;
if (nanoBits < 0) {
    nanoBits *= -1;
}
String dateParam = new Date().toString() + System.currentTimeMillis() 
        + "." + nanoBits;
param = new JobParametersBuilder().addString("date", dateParam)
        .toJobParameters();
JobExecution execution = jobLauncher.run(job, param);

Lorsque l'application démarre, je le vois lire, traiter et à écrire chacun des trois éléments de la liste passée pour le lecteur.

Reading data doc1.xkbml
Processing doc1.xkbml : documentId doc1
Writing [doc1.xkbml]
Reading data doc2.xkbml
Processing doc2.xkbml : documentId doc2
Writing [doc2.xkbml]
Reading data doc3.xkbml
Processing doc3.xkbml : documentId doc3
Writing [doc3.xkbml]

Parce que ce sourceJob est sur un minuteur planifiée, toutes les 10 secondes, je m'attendais à voir que la liste des traités, mais à la place je vois sur toutes les pistes.

Reading data null

Personne ne sait pourquoi ce qui se passe? Je suis nouveau sur Spring Batch et juste ne pouvez pas obtenir mes mains autour de la question.

Grâce /w

OriginalL'auteur wsams | 2013-08-29