스프링/6. 스프링 DB-2

49. 스프링 트랜잭션 전파 2

sdafdq 2023. 10. 16. 04:31

이번엔 여러가지 상황을 살펴볼 건데,

트랜잭션 후, 다시 트랜잭션

@Test
void doubleCommit(){
    log.info("트랜잭션1 시작");
    TransactionStatus status1 = txManager.getTransaction(new DefaultTransactionAttribute());
    log.info("트랜잭션1 커밋 시작");
    txManager.commit(status1);
    log.info("트랜잭션1 커밋 끝");
    log.info("트랜잭션1 끝.");

    log.info("트랜잭션2 시작");
    TransactionStatus status2 = txManager.getTransaction(new DefaultTransactionAttribute());
    log.info("트랜잭션2 커밋 시작");
    txManager.commit(status2);
    log.info("트랜잭션2 커밋 끝");
    log.info("트랜잭션2 끝.");
}

간단하다.

그리고 status는 한 트랜잭션에 대한 설정이라서, 다르게 써야 한다. 뭐랄까 쫌 커넥션에 대한 정보? 그런 게 남아 있는 듯?

2023-10-16T04:04:49.268+09:00  INFO 37344 --- [           main] hello.springtx.propagation.BasicTxTest   : 트랜잭션1 시작
2023-10-16T04:04:49.270+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2023-10-16T04:04:49.272+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Acquired Connection [HikariProxyConnection@2136187679 wrapping conn0: url=jdbc:h2:mem:e7205348-a7d7-4da8-9cd9-424deb061b9e user=SA] for JDBC transaction
2023-10-16T04:04:49.274+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Switching JDBC Connection [HikariProxyConnection@2136187679 wrapping conn0: url=jdbc:h2:mem:e7205348-a7d7-4da8-9cd9-424deb061b9e user=SA] to manual commit
2023-10-16T04:04:49.274+09:00  INFO 37344 --- [           main] hello.springtx.propagation.BasicTxTest   : 트랜잭션1 커밋 시작
2023-10-16T04:04:49.275+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Initiating transaction commit
2023-10-16T04:04:49.275+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Committing JDBC transaction on Connection [HikariProxyConnection@2136187679 wrapping conn0: url=jdbc:h2:mem:e7205348-a7d7-4da8-9cd9-424deb061b9e user=SA]
2023-10-16T04:04:49.275+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Releasing JDBC Connection [HikariProxyConnection@2136187679 wrapping conn0: url=jdbc:h2:mem:e7205348-a7d7-4da8-9cd9-424deb061b9e user=SA] after transaction
2023-10-16T04:04:49.275+09:00  INFO 37344 --- [           main] hello.springtx.propagation.BasicTxTest   : 트랜잭션1 커밋 끝
2023-10-16T04:04:49.275+09:00  INFO 37344 --- [           main] hello.springtx.propagation.BasicTxTest   : 트랜잭션1 끝.
2023-10-16T04:04:49.276+09:00  INFO 37344 --- [           main] hello.springtx.propagation.BasicTxTest   : 트랜잭션2 시작
2023-10-16T04:04:49.276+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2023-10-16T04:04:49.276+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Acquired Connection [HikariProxyConnection@1470153313 wrapping conn0: url=jdbc:h2:mem:e7205348-a7d7-4da8-9cd9-424deb061b9e user=SA] for JDBC transaction
2023-10-16T04:04:49.276+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Switching JDBC Connection [HikariProxyConnection@1470153313 wrapping conn0: url=jdbc:h2:mem:e7205348-a7d7-4da8-9cd9-424deb061b9e user=SA] to manual commit
2023-10-16T04:04:49.276+09:00  INFO 37344 --- [           main] hello.springtx.propagation.BasicTxTest   : 트랜잭션2 커밋 시작
2023-10-16T04:04:49.276+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Initiating transaction commit
2023-10-16T04:04:49.276+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Committing JDBC transaction on Connection [HikariProxyConnection@1470153313 wrapping conn0: url=jdbc:h2:mem:e7205348-a7d7-4da8-9cd9-424deb061b9e user=SA]
2023-10-16T04:04:49.276+09:00 DEBUG 37344 --- [           main] o.s.j.d.DataSourceTransactionManager     : Releasing JDBC Connection [HikariProxyConnection@1470153313 wrapping conn0: url=jdbc:h2:mem:e7205348-a7d7-4da8-9cd9-424deb061b9e user=SA] after transaction
2023-10-16T04:04:49.276+09:00  INFO 37344 --- [           main] hello.springtx.propagation.BasicTxTest   : 트랜잭션2 커밋 끝
2023-10-16T04:04:49.276+09:00  INFO 37344 --- [           main] hello.springtx.propagation.BasicTxTest   : 트랜잭션2 끝.

뭐 그냥 트랜잭션 순차적으로 2번 하는거다.

 

보면 좀 신기한 점이, 커넥션을 얻어올 때 프록시로 새 객체로 감싸서 가져온다.

근데 트랜잭션 1, 2의 저 프록시 객체는 다르지만 가져오는 물리적 커넥션? 

씁.. 물리적이라기 보다는 DB와 연결된 커넥션이라고 하는 게 맞지 않나? 그게 그거라고 보는 건가?

 

여튼 그거는 같다.

conn0

아마 풀이니 0~pool.size까지 순차적으로 확인 할 테니.

 

여튼 프록시로 새로 생성해 한번 감싸서 가져온 다는 거.

이러는 이유가 여기의 이 conn0 이 커넥션은 진짜 쫌 원시적인 커넥션? 이라서 

우리가 풀의 요소로써 쓸 때는 아무래도 원시커넥션에는 그냥 닫고 연결하고 뭐 커리 전송하고 그런 거 정도만 있겠지 풀에 반환하는 둥 그런 레벨의 기능은 없을거임. 그래서 프록시로 한번 감싸서 풀에 반환하는 기능을 구현한거임.

여튼 뭐 로깅, 사용자정의기능, 트랜잭션 관리 등 여러 이유를 위해 프록시로 한번 감쌈.

 

여튼 뭐 트랜잭션 범위는 이런 느낌. 주황색.

 

뭐 하나 커밋하고 그 다음 롤백해도 마찬가지임.

지금은 트랜잭션의 범위에 대해 배우는 중.

'스프링 > 6. 스프링 DB-2' 카테고리의 다른 글

51. 트랜잭션 전파 4  (0) 2023.10.16
50. 트랜잭션 전파 3  (0) 2023.10.16
48. 스프링 트랜잭션 전파  (0) 2023.10.16
47. 트랜잭션과 예외 -활용  (0) 2023.10.16
46. 트랜잭션과 예외  (0) 2023.10.16