From d2fd06ef8a5239ad78581ac7bd7b3d9df08a4769 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Thu, 21 Jul 2022 00:59:53 +0900 Subject: [PATCH] #13 spring transaction : propagation - rollback --- .../propagation/BasicTxTest.java | 49 ++++++++++++++++--- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/spring-transaction/src/test/java/com/example/springtransaction/propagation/BasicTxTest.java b/spring-transaction/src/test/java/com/example/springtransaction/propagation/BasicTxTest.java index 7b8951cc..cebe5585 100644 --- a/spring-transaction/src/test/java/com/example/springtransaction/propagation/BasicTxTest.java +++ b/spring-transaction/src/test/java/com/example/springtransaction/propagation/BasicTxTest.java @@ -1,6 +1,7 @@ package com.example.springtransaction.propagation; import lombok.extern.slf4j.Slf4j; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -9,10 +10,13 @@ import org.springframework.context.annotation.Bean; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.UnexpectedRollbackException; import org.springframework.transaction.support.DefaultTransactionDefinition; import javax.sql.DataSource; +import static org.assertj.core.api.Assertions.*; + @Slf4j @SpringBootTest public class BasicTxTest { @@ -84,18 +88,49 @@ public class BasicTxTest { TransactionStatus outer = txManager.getTransaction(new DefaultTransactionDefinition()); log.info("outer.isNewTransaction()={}", outer.isNewTransaction()); - innerMethod(); - - log.info("외부 트랜잭션 커밋"); - txManager.commit(outer); - } - - private void innerMethod() { log.info("내부 트랜잭션 시작"); TransactionStatus inner = txManager.getTransaction(new DefaultTransactionDefinition()); log.info("inner.isNewTransaction()={}", inner.isNewTransaction()); log.info("내부 트랜잭션 커밋"); txManager.commit(inner); + + log.info("외부 트랜잭션 커밋"); + txManager.commit(outer); + } + + @Test + void outer_rollback() { + log.info("외부 트랜잭션 시작"); + TransactionStatus outer = txManager.getTransaction(new DefaultTransactionDefinition()); + log.info("outer.isNewTransaction()={}", outer.isNewTransaction()); + + log.info("내부 트랜잭션 시작"); + TransactionStatus inner = txManager.getTransaction(new DefaultTransactionDefinition()); + log.info("inner.isNewTransaction()={}", inner.isNewTransaction()); + + log.info("내부 트랜잭션 커밋"); + txManager.commit(inner); + + log.info("외부 트랜잭션 롤백"); + txManager.rollback(outer); + } + + @Test + void inner_rollback() { + log.info("외부 트랜잭션 시작"); + TransactionStatus outer = txManager.getTransaction(new DefaultTransactionDefinition()); + log.info("outer.isNewTransaction()={}", outer.isNewTransaction()); + + log.info("내부 트랜잭션 시작"); + TransactionStatus inner = txManager.getTransaction(new DefaultTransactionDefinition()); + log.info("inner.isNewTransaction()={}", inner.isNewTransaction()); + + log.info("내부 트랜잭션 롤백"); + txManager.rollback(inner); + + log.info("외부 트랜잭션 커밋"); + assertThatThrownBy(() -> txManager.commit(outer)) + .isInstanceOf(UnexpectedRollbackException.class); } }