기본틀은 ItemReader를 받아와서, read()를 구현하면됨
즉 첫read때 api로 리스트를 한번에 가져온다음,거기서 한개씩 한개씩 읽어서 리턴해주는방식임
class ApiItemReader(
private val apiFetcher: ApiFetcher
): ItemReader<String> {
private var nextIndex=0
private var data:List<String> = emptyList()
override fun read(): String? {
if(data.isEmpty()){
data=fetchData()
}
return data.getOrNull(nextIndex++)
}
private fun fetchData():List<String>{
return apiFetcher.fetch()
}
}
이렇게 첫실행때 data를 fetchData로 가져온다음,그걸 저장해두고,nextIndex를 한칸씩 넘겨가면서 읽고 리턴해주는거임
그러다가 총갯수를 넘기면 null을 리턴하는식
api파싱만 되면 만들기는 쉬움
그리고 만약 메인프로젝트에서 배치처리가 필요로해서 서브프로젝트로 나왔으면,메인프로젝트의 해당 로직이 있을확률이 높으니,거기서 복사해와서 쓰면 날로먹을수있음
'스프링배치' 카테고리의 다른 글
스프링배치 실행시 BadSqlGrammarException이 뜰때 (1) | 2024.10.02 |
---|