작성
·
17
·
수정됨
1
안녕하신가 미스터 KILL-9
항상 빠르고 친절한 답변 고맙다
이번에 회사 로직 작성중에 조금 막막한 부분이 있어 질문 하러 왔다
reader 엑셀 파일 읽어오고
processor 에서 해당 엑셀 데이터 값을 가지고 dao 호출해서 검증하고, 깍고(가공)
마지막으로 쓰기 처형하는데 작업을 하는데
문제는 가공 단계에서 dao 를 직접 호출하면
ExecutorType 이 simple 로 호출되고
쓰기 단계에서 batch 로 ExecutorType 실행되어 에러가 발생한다
Cannot change the ExecutorType… 이렇게 말이다..
그래서 일단 아래 코드 처럼 해결은 했어 우선 기존 코드는
PoiItemReader -> ItemProcessor<> (여기서 mybatis dao 호출 해서 검증작업도 함) -> MyBatisBatchItemWriter -> 에러 Cannot change the ExecutorType…
해결한 코드
PoiItemReader -> ItemProcessor<> (여기서 mybatis dao 호출 해서 검증작업도 함) -> JdbcBatchItemWriter-> (해결)
그런데 이렇게 작성해도 되려나 싶네..
그리고 String 문으로 쿼리 짜는것도 맘에 안들고..ㅠㅠ
답변 2
1
또 보는군 중한이형
mybatis라... 한 5,6년 만이라 기억도 잘 안 나는군..
오히려 내가 역제안을 해보겠다.
ItemProcessor와 ItemWriter에서 사용할 SqlSessionTemplate 빈을 별도로 정의해서 사용해보는 것을 권한다(사실 나도 너가 돌려봐야 알 수 있다)
SqlSessionTemplate가 내부를 보니 SqlSessionUtils.getSqlSession()을 호출하는군 이 getSqlSession() 메서드는 TransactionSynchronizationManager를 활용해 기존 스텝의 트랜잭션에 참여할것으로 기대되된다.
문제 없겠다 한 번 시도해보라 💀💀
0
안녕하세요, 인프런 AI 인턴입니다.
wndgks49님, Spring Batch에서 Processor 단계에서 발생하는 ExecutorType
관련 문제로 질문을 주셨군요. 이 문제는 주로 MyBatis와 함께 사용할 때 발생하는 일반적인 이슈입니다. ExecutorType
이 다르게 설정되면 에러가 발생할 수 있습니다. 최적의 해결책을 찾기 위해 몇 가지 방법을 제안드립니다.
같은 ExecutorType 사용하기:
ExecutorType
을 동일하게 설정하여 SIMPLE
이나 BATCH
모드 중 하나로 통일하는 것이 중요합니다. 그렇게 하면 데이터베이스 연결에서 일관성이 유지되어 에러가 발생하지 않습니다.Processor에서의 처리 로직 개선:
Step 나누기:
Transaction
과 관련 설정을 별도로 관리할 수 있습니다.Separate Transaction 관리:
유사한 문제와 관련하여 도음이 될 수 있는 답변을 아래 참고하세요:
- Spring Batch에서의 Processor 단계에서 DAO 호출
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.