Ich bin neu zu Spring Batch und ich versuche, einen Linux-Sortierbefehl nach dem Batch-Prozess mit SystemCommandTasklet als zweiten Schritt auszuführen. Es wird jedoch NullPointerException ausgelöst, wenn größere Dateien sortiert werden (was einige Zeit in Anspruch nimmt, etwa 250 MB). Es sieht so aus, als ob SystemCommandTasklet StepExecution in beforeStep() nicht initialisieren und einen Fehler ausgeben kann. Kann jemand meine Konfiguration überprüfen und mich wissen lassen, wenn ich irgendeine Konfiguration vermisse, die das verursacht?Spring Batch SystemCommandTasklet werfende Nullzeigerausnahme
BatchConfig.java
@Bean
public Job job() throws Exception {
return jobs.get("job")
.incrementer(new RunIdIncrementer())
.flow(step1()).on("FAILED").fail().on("COMPLETED").to(step2())
.end()
.build();
}
@Bean
public Step step1() {
return steps.get("step1")
.<FileEntry,FileEntry>chunk(100)
.reader(reader()).faultTolerant().skipLimit(MAX_SKIP_LIMIT).skip(FlatFileParseException.class)
.processor(new Processor())
.writer(compositeWriter()).stream(outputwriter()).stream(rejectwriter())
.listener(new CustomStepExecutionListener())
.build();
}
@Bean
public Step step2() throws Exception {
return steps.get("step2")
.tasklet(sortingTasklet())
.build();
}
@Bean
@StepScope
public Tasklet sortingTasklet() throws Exception {
SystemCommandTasklet tasklet = new SystemCommandTasklet();
logger.debug("Sorting File : " + getOutputFileName());
tasklet.setCommand(new String("sort " + getOutputFileName() + " -d -s -t \001 -k1,1 -o " + getOutputFileName() + ".sorted "));
tasklet.setTimeout(600000l);
return tasklet;
}
Hier ist der Link zu SpringBatch Quellcode für SystemCommandTasklet, seine Wurfnullpointer an der Linie 131.
https://github.com/spring-projects/spring-batch/blob/master/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/SystemCommandTasklet.java
Vielen Dank für die Antwort. Es funktioniert jetzt perfekt. Außerdem bin ich ein großer Fan von Spring Batch :) –
@Mihael Minella, welchen Schritt würden Sie das Tasklet als Hörer auf registrieren? – mfunaro
Der Schritt, auf dem es verwendet wird. –