잘 정리해보자
Spring Batch Error : TransientDataAccessResourceException : Batch Execution Errorsdetails;Cannot change the ExecutorType when there is an existing transaction 본문
Spring/Spring Boot
Spring Batch Error : TransientDataAccessResourceException : Batch Execution Errorsdetails;Cannot change the ExecutorType when there is an existing transaction
토마토오이 2022. 1. 19. 00:16에러 메시지 :
TransientDataAccessResourceException : Batch Execution Errors details <Cannot change the ExecutorType when there is an existing transaction
발생 원인 :
batch execution(ExecutorType.BATCH)이 동작 중인데, 중간에 mapper(ExecutorType.SIMPLE)를 호출하면서 발생.
( AbstractPagingItemReader 진행 중에 mapper 호출해서 발생했다.
log를 남길 수 없는 환경에서 DB에 log insert하는 mapper를 호출하려다 트랜잭션에러 발생.)
해결 :
pagingItemReader는 BATCH타입으로 실행중인데, mapper는 기본인 SIMPLE타입으로 호출해서 BATCH타입으로 session 맞추면 해결.
ExecutorType.BATCH 으로 트랜잭션 세션을 open하고 mapper 호출 완료 후 다시 close하는 방식으로 구현.
//log insert
private void insertLog(String desc) {
SqlSession sqlsession = sqlSessionFactory.openSession(ExecutorType.BATCH);
Map<String,Object> param = new HashMap<String,Object>();
param.put("log", desc);
try {
sqlsession.insert(mapper.class.getName() +".insetLogDesc", param);
}finally {
sqlsession.flushStatements();
sqlsession.close();
}
}
'Spring > Spring Boot' 카테고리의 다른 글
Spring Batch Error : Writer must be open before it can be written to (0) | 2022.01.23 |
---|---|
Spring Batch - csv파일 읽기 (FlatFileItemReader) (0) | 2022.01.21 |
Spring Batch - Tasklet, Chunk 간단 비교 (0) | 2022.01.13 |
Spring Batch 설정과 시작 (0) | 2022.01.11 |
Spring Batch Error : org.springframework.dao.EmptyResultDataAccessException: Item 2 of 10 did not update any rows (0) | 2022.01.10 |
Comments