MemberRepositoryV3
1. getConnection() 커넥션 가져옴.

getConnection 메서드 들어가보면

트랜잭션동기화매니저에 보관된 커넥션을 꺼낸다.

2. releaseConnection() 커넥션 반납

이제 커넥션파라미터로 넘기는 메서드는 필요없으므로 지운다. ( update, findById )

서비스계층에서 트랜잭션을 안만들어서 트랜잭션 동기화 매니저에 커넥션이 없는 경우. ( 위에서 두번 째 )
-> 새로운 커넥션을 생성해서 반환.

중요하다. ( 동기화 되었는지 체크해준다. )
( 커넥션을 트랜잭션 동기화 매니저에서 가져와 쓴 경우 리포지토리에서 close해도 닫지 않고 유지 해준다.
이제 트랜잭션매니저를 사용하는 서비스코드를 작성해보자.

지금 MemberService의 문제 : dataSource를 그대로 가져다 쓴다.

JDBC 종속적인 코드
MemberServiceV3_1

PlatformTransactionmanager 를 주입받자.

getTransaction(definition) 으로 트랜잭션을 시작하자. status 반환.
commit, rollback 도 transactionManager 로 해주어야한다.
commit or rollback 하면 되므로 직접 release 해줄 필요 없다.


트랜잭션 매니저에서 커넥션을 만든다. (그래야 setAutoCommit false 등 설정을 해줄 수 있다. )
(그래서 )

파라미터로 dataSource를 넘겨주어야한다.

꾸준히 다시보자.
1. 221014
2. 221101
'Java, Spring > Spring DB 1' 카테고리의 다른 글
4-6. 트랜잭션 문제 해결 - 트랜잭션 템플릿 (0) | 2022.10.09 |
---|---|
4-5. 트랜잭션 문제 해결 - 트랜잭션 매니저2 (0) | 2022.10.09 |
4-3. 트랜잭션 동기화 (0) | 2022.09.28 |
4-2. 트랜잭션 추상화 (0) | 2022.09.28 |
4-1. 문제점들(서비스 계층에 트랜잭션 코드가 너무 많다.) (0) | 2022.09.27 |