2017-05-23 4 views
2

필자가 요구하는 것은 데이터베이스에서 데이터를 읽고이를 바이트로 변환 한 다음 Blob 열의 다른 데이터베이스 (Oracle)로 스트리밍하는 것이다.Spring Batch 애플리케이션에서 이진 (Blob) 데이터를 처리하는 방법

Oracle은 Blob 열로 스트리밍하기 위해 JDBC 자동 커밋을 비활성화하고 완료되면 Connection # Commit을 호출해야합니다.

현재 3 단계가 있습니다.

1 단계 (태스크 릿) : 두 개의 SQL 쿼리가 있습니다. 하나가 열을 초기화 (UPDATE DATABASEUSER.TABLENAME SET payload = empty_blob() WHERE PrimaryKey= ?)

은 두 번째는 물방울 로케이터를 반환 (SELECT payload AS payload FROM DATABASEUSER.TABLENAME WHERE PrimaryKey = ? FOR UPDATE)

또한 자동 커밋을 해제하는 데이터 소스에서 연결 개체를 얻을

2 단계 (척) 원본 DB에서 일반적인 방식으로 데이터를 읽는 IteamReader와 행을 CSV 형식으로 변환하지만 바이트 단위로 변환하는 프로세서가 있습니다. 그런 다음 Blob 열에 데이터를 스트리밍하는 Custom ItemWriter가 있습니다.

3 단계 (태스크 릿) 이것은 연결을 정리하고 커밋 할 때입니다.

질문 1 : 올바른 전략입니까? 내가 어떤 방향인지 알기가 쉽지 않다.

+0

아니요. 여러 단계에서 트랜잭션을 보유 할 수 없습니다. 각 단계는 자체적으로 커밋해야합니다. –

+0

@DeanClark 감사합니다. –

답변

0

나는 그것을 풀었다.

모든 단계에서 ResourcelessTransactionManager 트랜잭션 관리자를 사용했습니다. 1 단계에서 데이터 원본에서 연결을 가져오고 자동 커밋을 사용하지 않도록 설정하고 마지막 단계에서 커밋을 호출합니다. 모든 단계에서 동일한 연결을 사용합니다.