건너뛰기(skip)는 Spring Batch에서 특정 예외가 발생했을 때 해당 데이터만 무시하고 다음 아이템을 계속 처리하도록 하는 기능입니다.
@Bean
public Step skipStep() {
return stepBuilderFactory.get("skipStep")
.<String, String>chunk(10)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.faultTolerant()
.skip(ParsingException.class)
.skipLimit(5)
.build();
}
예시 코드
public class SkipReader implements ItemReader<String> {
private Iterator<String> data = List.of("item1", "error", "item2").iterator();
@Override
public String read() throws Exception {
String item = data.next();
if (item.equals("error")) {
throw new ParsingException("Invalid format");
}
return item;
}
}
예시 코드
public class SkipProcessor implements ItemProcessor<String, String> {
@Override
public String process(String item) throws Exception {
if (item.equals("bad")) {
throw new IllegalStateException("Invalid data");
}
return item.toUpperCase();
}
}
예시 코드
public class SkipWriter implements ItemWriter<String> {
@Override
public void write(List<? extends String> items) throws Exception {
for (String item : items) {
if (item.equals("fail")) {
throw new WriteFailureException("DB insert error");
}
}
System.out.println("Written: " + items);
}
}