eGovFrame 표준프레임워크 포털

메뉴 건너띄기
상단메뉴 바로가기
본문 바로가기

이 누리집은 대한민국 공식 전자정부 누리집입니다.

본문 영역

적용 지원, FAQ, Q&A 게시판을 통해 기술 문제 해결을 지원합니다.

묻고 답하기

배치 템플릿 실행 오류
  • 작성자

    김*수

  • 작성일

    2013-08-01 16:49:16

  • 조회수

    2,214

  • 구분

    실행환경

  • 진행상태

    완료

질문

수고하십니다.
egov Batch Template Project를 이용하여 웹에서 호출하는 배치 프로젝트를 만들고, DB를 오라클로 변경하여 실행하면 다음과 같은 오류거 나타납니다.

org.springframework.dao.CannotSerializeTransactionException: PreparedStatementCallback; SQL [INSERT INTO BATCH_JOB_EXECUTION_CONTEXT (SHORT_CONTEXT, SERIALIZED_CONTEXT, JOB_EXECUTION_ID) VALUES(?, ?, ?)]; ORA-08177: 이 트랜잭션에 대한 직렬화 액세스를 할 수 없습니다
; nested exception is java.sql.SQLException: ORA-08177: 이 트랜잭션에 대한 직렬화 액세스를 할 수 없습니다

무엇을 설정해야 하나요?

답변

안녕하세요. 김김수님.

여러 VM이 동시에 batch job을 실행시킬 때에 발생되는 오류 같습니다.

이 경우는 oracle의 특성 상 serializable transaction이 시작된 후 commit에 의해 수정된 데이터를 수정하거나 삭제할 때에 발생되는 상황입니다.

(Spring Batch의 repository 처리 방식은 기본적으로 serializable로 설정됨)

해결 방법은 context-batch-job-launcher.xml 상에 지정된 jobRepository bean 상에 다음과 같은 속성 값을 지정하시면 되실 것 같습니다.

<property name="isolationLevelForCreate" value="ISOLATION_DEFAULT" />

p namespace를 사용하신 경우(현재 적용 방식)은 전체 다음과 같이 적용하시면 됩니다.

<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"
p:dataSource-ref="dataSource" p:transactionManager-ref="transactionManager"
p:lobHandler-ref="lobHandler"
p:isolationLevelForCreate="ISOLATION_DEFAULT" />

그럼, 즐거운 하루되십시오.
감사합니다.

이 페이지의 구성

묻고 답하기