일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- JSON 분할
- 스테이지에 올리기
- JobExecutionAlreadyRunningException
- JSONArray 분할
- 폐기하기
- 스프링 리액티브 프로그래밍
- 성능개선
- 날짜형을 문자형으로
- str_to_date
- nonblocking
- 스프링 배치 메타 테이블
- git stage
- Meta Table
- jar 소스보기
- JSONObject 분할
- JSON 분해
- batchInsert
- 문자형을 날짜형으로
- JSON 분리
- 스프링 웹플럭스
- org.json
- 마이바티스 트랜잭션
- 무시하기
- spring reactive programming
- 마리아디비
- multi update
- 스프링 배치 공식문서
- ChainedTransactionManager #분산데이터베이스 #Spring Boot #MyBatis
- spring webflux
- date_format
- Today
- Total
ebson
org.springframework.dao.TransientDataAccessResourceException: Cannot change the ExecutorType when there is an existing transaction - 원인과 해결방법 본문
org.springframework.dao.TransientDataAccessResourceException: Cannot change the ExecutorType when there is an existing transaction - 원인과 해결방법
ebson 2023. 2. 17. 10:57스프링 부트 배치 개발 중에 org.springframework.dao.TransientDataAccessResourceException: Cannot change the ExecutorType when there is an existing transaction 예외가 발생했다.
MyBatisItemReader로 읽은 데이터를 ItemProcessor가 처리하면서 마이바티스 매퍼를 사용하고자 할 때 발생하는 것으로 추적되었다. 원인을 분석해보니, MyBatisItemReader는 트랜잭션을 생성할 때, ExecuteType.BATCH로 생성하는 반면, Mybatis의 트랜잭션 생성 기본 전략은 ExecuteType.SIMPLE 인 것이 문제였다. 동일한 트랜잭션에서 ExecuteType을 변경하여 쿼리를 호출할 수 없기 때문에 위 예외를 발생시킨 것이다.
ItemProcessor의 process 메서드 위에 @Transactional(propagation = Propagation.REQUIRES_NEW) 어노테이션을 추가하여, 강제로 트랜잭션을 분리 생성하도록 했다. 즉, MyBatisItemReader가 ExecuteType.BATCH로 생성한 트랜잭션이 전파되지 않도록 강제했다. 이렇게 하면 위 예외가 발생하지 않으면서 MyBatisItemReader가 전달한 데이터를 ItemProcessor에서 처리하되 마이바티스 매퍼를 사용해 처리할 수 있다.
*ItemProcessor.process(*Item item)
참고출처
"Transaction 내에서 ExecutorType 변경 불가 오류", tomining.tistory.com, 2017년 3월 15일 수정, 2023년 2월 17일 접속, https://tomining.tistory.com/178.
"Spring Transaction 전파", mypiece 네이버 블로그, 2019년 11월 27일 수정, 2023년 2월 17일 접속, https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=vefe&logNo=221719503894.
'HANDS-ON' 카테고리의 다른 글
[ Spring Framework Transaction, LG CNS DEVON-Framework batch-insert ] 데브온 프레임웍의 배치인서트 사용해 성능 개선하기 (0) | 2023.04.06 |
---|---|
[ 스프링 부트 배치 속도개선 ] 마이바티스 배치업데이트, 스프링 HTTP API 비동기 요청 적용해 배치 잡 속도 개선하기 (0) | 2023.04.03 |
[JSON 라이브러리 pull request] JSON 분리 기능 개발해보기 (0) | 2023.02.24 |
[Spring boot, Mybatis, ChainedTransactionManager ] 분산 데이터베이스 트랜잭션 처리하기 (0) | 2023.02.23 |
XML 파일을 JSON 문자열로 변환하기 (0) | 2023.01.31 |