JdbcTemplate은 binding된 connection을 재사용한다

Transaction manager가 DataSource identity에 묶어 둔 Connection을 여러 repository가 DataSourceUtils를 통해 찾아 한 transaction에 참여한다.

MANAGER

Connection bind

transaction 시작 시 DataSource key로 resource를 현재 context에 묶는다.

BOUND RESOURCE

같은 Connection

JdbcTemplate 조회가 새 연결 대신 현재 resource를 반환한다.

REPO A

첫 번째 변경

같은 DB session에서 SQL을 실행한다.

REPO B

두 번째 변경

같은 resource를 재사용해 원자성에 참여한다.

COMPLETE

한 번 Commit

manager가 두 변경을 함께 확정한다.

IDENTITY

같은 DataSource

서로 다른 DataSource면 자동 참여하지 않는다.

핵심: repository가 같은 설정처럼 보여도 동일한 DataSource identity를 통하지 않으면 같은 transaction resource가 아니다.