2012-09-19 3 views
3

Spring-Batch에서 단계 간 트랜잭션 성은 없습니다. 많은 단계가 데이터베이스에서 여러 작업을 수행하는 복잡한 일괄 작업을 개발 중이며 각 작업은 다른 작업과 관련되어 있으므로 각 작업이 동일한 트랜잭션에 속합니다. Spring-Batch 패러다임을 이해하는 방식으로 트랜잭션 성을 갖기 위해 원 스톱 작업을 사용해야합니다. 최근 버전이나 미래 버전에서 일종의 거래 성을 가질 생각이 있습니까?일괄 처리 Spring Batch에서의 트랜잭션 성

편집 1 :이 link, 포인트 6.3.1, 여러 프로세서를 연결하는 방법을 찾았지만 현재의 필요를 충족시키지 못합니다.

Edit2 :이 다른 link은 내 작업을 호출하는 "@ 트랜잭션"주석이있는 봉투 클래스를 사용할 가능성이 있으므로 외부 트랜잭션이 있어야합니다.

+0

당신은 한 단계 만 사용하고 비즈니스 구현에 "여러 단계의 논리"를 적용하려고 했습니까? –

+0

그래, 한 번만 사용할 수있는 일괄 처리를 사용해 보았습니다. 그러나 Spring을 적응력이 뛰어나므로 여러 가지 용도로 사용할 수 있도록 일자리 거래를하는 것이 좋습니다. – mantoviejo

+0

원 스톱 전용 작업의 가장 큰 오류는 하나 이상의 (또는 그 이상의) 프로세서 내부에 모든 비즈니스 로직을 추가해야한다는 것입니다. 이렇게하면 Spring Batch 개념을 따르지 않고 모든 프로세스의 복잡성을 한 단계에 추가하여 로직 목표를 달성하기 위해 DAO를 프로세서에 사용하는 것으로 제한되었습니다. – mantoviejo

답변

2

마지막으로 이것을 수행하는 방법을 발견했습니다. 마지막 판에서 말했듯이 당신은 트랜잭션 방법에서 작업을 호출해야합니다 :

@Transactional (전파 = Propagation.REQUIRED를)

것이 중요 설정이 수준에서 필요에 전파 수준이다. 그리고 job level propagation을 "mandatory"로 설정하십시오.이 작업을 통해 현재의 트랜잭션을 추가하십시오. 그럼에도 불구하고 Michael Lange가 썼듯이, 제한된 커밋 또는 롤백을 피하기 위해 관리하는 잠재적 인 볼륨 크기를 고려하는 것이 중요합니다.