#13 spring transaction : propagation - rollback
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user