트랜잭션이 둘 이상 있을 때 라던지,
아니면
저번에 트랜잭션 프록시에서 트랜잭션 아닌 거에서 트랜잭션을 호출했을 때
어떻게 동작하는 지 알아 봄.
@Slf4j
@SpringBootTest
public class BasicTxTest {
@Autowired
PlatformTransactionManager txManager;
@Test
void commit(){
log.info("트랜잭션 시작");
TransactionStatus status = txManager.getTransaction(new DefaultTransactionAttribute());
log.info("트랜잭션 커밋 시작");
txManager.commit(status);
log.info("트랜잭션 커밋 완료");
}
@Test
void rollback(){
log.info("트랜잭션 시작");
TransactionStatus status = txManager.getTransaction(new DefaultTransactionAttribute());
log.info("트랜잭션 롤백 시작");
txManager.rollback(status);
log.info("트랜잭션 롤백 완료");
}
@TestConfiguration
static class Config{
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
}
}
일단 그냥 트랜잭션 했을 때
우리가 과거 JDBC 트랜잭션 했을 때 그거임. getTransaction() 하면 트랜잭션 시작. Default 트랜잭션 설정.
이번엔 그냥 트랜잭션 상황을 로그로만 볼려고.
2023-10-16T03:41:39.063+09:00 INFO 26792 --- [ main] hello.springtx.propagation.BasicTxTest : 트랜잭션 시작
2023-10-16T03:41:39.065+09:00 DEBUG 26792 --- [ main] o.s.j.d.DataSourceTransactionManager : Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2023-10-16T03:41:39.067+09:00 DEBUG 26792 --- [ main] o.s.j.d.DataSourceTransactionManager : Acquired Connection [HikariProxyConnection@741268455 wrapping conn0: url=jdbc:h2:mem:8717cf07-b6f4-45a4-a715-2e273237e0b6 user=SA] for JDBC transaction
2023-10-16T03:41:39.070+09:00 DEBUG 26792 --- [ main] o.s.j.d.DataSourceTransactionManager : Switching JDBC Connection [HikariProxyConnection@741268455 wrapping conn0: url=jdbc:h2:mem:8717cf07-b6f4-45a4-a715-2e273237e0b6 user=SA] to manual commit
2023-10-16T03:41:39.070+09:00 INFO 26792 --- [ main] hello.springtx.propagation.BasicTxTest : 트랜잭션 롤백 시작
2023-10-16T03:41:39.070+09:00 DEBUG 26792 --- [ main] o.s.j.d.DataSourceTransactionManager : Initiating transaction rollback
2023-10-16T03:41:39.070+09:00 DEBUG 26792 --- [ main] o.s.j.d.DataSourceTransactionManager : Rolling back JDBC transaction on Connection [HikariProxyConnection@741268455 wrapping conn0: url=jdbc:h2:mem:8717cf07-b6f4-45a4-a715-2e273237e0b6 user=SA]
2023-10-16T03:41:39.071+09:00 DEBUG 26792 --- [ main] o.s.j.d.DataSourceTransactionManager : Releasing JDBC Connection [HikariProxyConnection@741268455 wrapping conn0: url=jdbc:h2:mem:8717cf07-b6f4-45a4-a715-2e273237e0b6 user=SA] after transaction
2023-10-16T03:41:39.071+09:00 INFO 26792 --- [ main] hello.springtx.propagation.BasicTxTest : 트랜잭션 롤백 완료
시작하고
Acquired 커넥션 풀에서 커넥션 얻어오고,
뭔가 공통적 처리를 위해 JDBC 커넥션으로 바꾼 듯?
그 다음 롤백이나 커밋이나 비슷한데,
commit이나 rollback 준비작업, initiating 해 주고,
커넥션에 롤백 한다고 하면 커넥션이 DB로 롤백한다고 전해주고,
그 다음 Releasing, 커넥션 풀에다 다시 반환해주고.
저기서 그냥 Roll back 부분들을 Commit으로 바꿔주면 똑같음.
'스프링 > 6. 스프링 DB-2' 카테고리의 다른 글
50. 트랜잭션 전파 3 (0) | 2023.10.16 |
---|---|
49. 스프링 트랜잭션 전파 2 (0) | 2023.10.16 |
47. 트랜잭션과 예외 -활용 (0) | 2023.10.16 |
46. 트랜잭션과 예외 (0) | 2023.10.16 |
44. 트랜잭션 AOP 주의사항 -초기화 시점 (0) | 2023.10.15 |