ich folgendes ItemReader
haben:Kann Frühling Retry mit Spring Batch verwendet werden FlatFileItemReader
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.ItemStreamException;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.LineMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;
@Service
public class MyReader extends FlatFileItemReader<Holding> {
@Autowired
public MyReader(LineMapper<Holding> lineMapper, File loadFile) {
setResource(new FileSystemResource(loadFile));
final int NUMBER_OF_HEADER_LINES = 1;
setLinesToSkip(NUMBER_OF_HEADER_LINES);
setLineMapper(lineMapper);
}
@Override
@Retryable(value=ItemStreamException.class, maxAttempts=5, [email protected](delay=1800000))
public void open(ExecutionContext executionContext) throws ItemStreamException {
super.open(executionContext);
}
}
Die Datei lesen (das heißt loadFile
) kann sein oder auch nicht verfügbar sein, wenn der Job ausgeführt wird. Wenn die Datei nicht verfügbar ist, möchte ich, dass der Reader ca. 30 Minuten lang nicht reagiert und dann erneut versucht, die Datei zu öffnen. Wenn nach fünf Versuchen die Datei nicht gefunden wird, kann sie wie üblich fehlschlagen, indem ItemStreamException
geworfen wird.
Leider versucht der obige Code nicht, das Öffnen der Datei erneut zu versuchen. Es löst ItemStreamException
beim ersten Aufruf zum Öffnen und nicht erneut versuchen, zu öffnen.
Kann jemand bitte erklären, wie man das macht? Hinweis: Ich habe @EnableRetry
auf der SpringBootApplication
Klasse.
Ich kann Spring Retry auch außerhalb von Spring Batch 'FlatFileItemReader' arbeiten lassen. Im OP frage ich, wie man das in FlatFileItemReader von Spring Batch umsetzen kann. – James