2013-09-26 3 views
2

스프링 배치를 사용하여 배치를 개발 중입니다. 두 단계가 있는데, step1은 table1을 업데이트하고 다른 step2는 table2를 업데이트했습니다.스프링 배치의 트랜잭션 관리

두 번째 step2가 실패하면 모든 치료가 취소됩니다 (롤백). 어떻게해야합니까 ??

<b:step id="Step1" parent="Tache"> 
    <b:tasklet> 
     <b:chunk reader="baseReader" processor="baseProcessor" 
      chunk-completion-policy="completionPolicy" /> 
    </b:tasklet> 
</b:step> 

<b:step id="Step2" parent="Tache"> 
    <b:tasklet> 
     <b:chunk reader="baseReaderEcriture" 
      writer="ecritureWriter" chunk-completion-policy="completionPolicy" /> 
    </b:tasklet> 
</b:step> 

<b:job id="batch" parent="Batch"> 
    <b:step id="step1" parent="Step1" next="step2"/> 
    <b:step id="step2" parent="Step2" /> 
</b:job> 

감사 :

나는 아래의 샘플 XML 설정을 가지고!

+0

보기. 이것은 아이디어를 줄 수 있습니다. http://stackoverflow.com/questions/14369876/spring-batch-and-x-and-local-transactions –

답변

2

이미 커밋 된 데이터를 롤백 할 수없는 당신이 모두 자동으로 롤백 할 수 있도록 (모든 체크 후 - 데이터만큼 스프링 배치 메타 데이터가 최선을 다하고 있습니다로 - 당신이 정책을 completition 기준) step1에 저장된 데이터.
아마 당신은이 구문을 사용할 수 있습니다

<b:job id="batch" parent="Batch"> 
    <b:step id="step1" parent="Step1" next="step2"/> 
    <b:step id="step2" parent="Step2"> 
     <next on="ROLLBACK_ALL" to="deleteDataSavedByStep1Step" /> 
     <end on="*" /> 
    </b:step> 
</b:job> 

다음 1 단계에서 저장 한 데이터를 삭제하는 데 사용되는 단계로 이동합니다,하지만 당신은 당신이 deleteDataSavedByStep1Step 단계에서 삭제해야하는 데이터 알아야합니다.

+0

또한 http://stackoverflow.com/questions/19031186/spring-batch-one-transaction-over-whole-job –

+1

을 확인해 주셔서 감사합니다. 귀하의 답변에 영감을 받았습니다. –

0
+0

답장을 보내 주셔서 감사합니다. 단일 데이터베이스 (데이터 소스)를 사용합니다. XA 트랜잭션이 필요하지 않습니까? 두 번째 링크에서 이미 본적이 있지만 내 경우 이야기하지 않습니다. 단계 2 실패하면 롤백 1 단계 ... –

+0

나는 어떻게 동일한 트랜잭션 관리자에서 step1 및 step2 다루는 방법을 시도 !! ? –

+0

내 대답은 내 대답 읽기; 전체 tx 관리는 정말 나쁜 생각입니다! –

관련 문제