#13 spring transaction : propagation - rollback requires new
This commit is contained in:
@@ -9,8 +9,10 @@ import org.springframework.boot.test.context.TestConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.transaction.TransactionDefinition;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
import org.springframework.transaction.UnexpectedRollbackException;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.transaction.support.DefaultTransactionDefinition;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
@@ -133,4 +135,23 @@ public class BasicTxTest {
|
||||
assertThatThrownBy(() -> txManager.commit(outer))
|
||||
.isInstanceOf(UnexpectedRollbackException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void inner_rollback_requires_new() {
|
||||
log.info("외부 트랜잭션 시작");
|
||||
TransactionStatus outer = txManager.getTransaction(new DefaultTransactionDefinition());
|
||||
log.info("outer.isNewTransaction()={}", outer.isNewTransaction()); // true
|
||||
|
||||
log.info("내부 트랜잭션 시작");
|
||||
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
|
||||
definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 신규 트랜잭션
|
||||
TransactionStatus inner = txManager.getTransaction(definition);
|
||||
log.info("inner.isNewTransaction()={}", inner.isNewTransaction()); // true
|
||||
|
||||
log.info("내부 트랜잭션 롤백");
|
||||
txManager.rollback(inner);
|
||||
|
||||
log.info("외부 트랜잭션 커밋");
|
||||
txManager.commit(outer);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user