У меня есть следующие ItemReader
:Может Spring Retry использоваться с Spring Batch 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);
}
}
Файл для чтения (т.е. loadFile
) могут или не могут быть доступны при выполнении задания. Если файл недоступен, я хочу, чтобы читатель спал ~ 30 минут, а затем повторите попытку открытия файла. Если после пяти попыток файл не найден, он может выйти из строя, как обычно, выбрасывая ItemStreamException
.
К сожалению, приведенный выше код не пытается повторно открыть файл. Он выдает ItemStreamException
при первом открытии вызова и не запускает его повторно.
Может кто-нибудь объяснить, как это сделать? Примечание: У меня есть @EnableRetry
на классе SpringBootApplication
.
Я также могу получить Spring Retry для работы за пределами «FlatFileItemReader» Spring Batch. В OP я спрашиваю, как заставить это работать в SpringFileItemReader от Spring Batch. – James