작성
·
2.4K
0
답변 1
6
안녕하세요. 김우철님
다음 순서를 봐주세요^^
트랜잭션을 사용하는 경우
1. 트랜잭션 프록시를 호출한다.
2. 트랜잭션 프록시는 데이터소스를 찾아서 사용한다. 이때 커넥션 풀에서 커넥션을 획득한다.
3. 커넥션을 모두 사용하고 나면 connection.close()를 호출한다. 이때 실제 커넥션이 커넥션 풀로 돌아간다.
트랜잭션 없이 바로 사용하는 경우
1. 트랜잭션 없이 리포지토리를 호출한다.
2. 리포지토리 내부에서 데이터소스를 찾아서 사용한다. 이때 커넥션 풀에서 커넥션을 획득한다.
3. 커넥션을 모두 사용하고 나면 connection.close()를 호출한다. 이때 실제 커넥션이 커넥션 풀로 돌아간다.
커넥션 풀에 커넥션이 되돌아가는 코드는 바로 connection.close() 입니다. 그런데 connection.close()를 호출하게 되면 커넥션이 종료되어버리겠지요!
그래서 커넥션풀에서 커넥션을 반환할 때 커넥션풀(hikariCP)은 실제 물리 커넥션을 바로 반환하는 것이 아니라 실제 물리커넥션을 내부에 한번 감싼 프록시 커넥션을 반환합니다.
이것이 바로 com.zaxxer.hikari.pool.HikariProxyConnection 이지요.
이 프록시 커넥션에 connection.close()를 호출하게 되면 내부의 물리 커넥션을 풀에 반환하게 됩니다^^
감사합니다.