트랜잭션 전파 - 트랜잭션 두 번 사용

박찬우·2024년 2월 8일

스프링 DB

목록 보기
46/53

트랜잭션 두 번 사용

  • 각각의 트랜잭션이 있는 경우 각각 처리 되기 때문에 한쪽에 문제가 생겨도 별다른 문제가 없음
@Slf4j
@SpringBootTest
public class BasicTxTest {
    @Autowired
    PlatformTransactionManager txManager;

    @TestConfiguration
    static class Config {
        @Bean
        public PlatformTransactionManager transactionManager(DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    }

    @Test
    void double_commit() {
        // Acquired Connection [HikariProxyConnection@2083660714 wrapping conn0:
        log.info("트랜잭션1 시작");
        TransactionStatus tx1 = txManager.getTransaction(new DefaultTransactionDefinition());
        log.info("트랜잭션1 커밋");
        txManager.commit(tx1);

        // Acquired Connection [HikariProxyConnection@683605346 wrapping conn0:
        log.info("트랜잭션2 시작");
        TransactionStatus tx2 = txManager.getTransaction(new DefaultTransactionDefinition());
        log.info("트랜잭션2 커밋");
        txManager.commit(tx2);
    }
    
    @Test
    void double_commit_rollback() {
        // Acquired Connection [HikariProxyConnection@2083660714 wrapping conn0:
        log.info("트랜잭션1 시작");
        TransactionStatus tx1 = txManager.getTransaction(new DefaultTransactionDefinition());
        log.info("트랜잭션1 커밋");
        txManager.commit(tx1);

        // Acquired Connection [HikariProxyConnection@683605346 wrapping conn0:
        log.info("트랜잭션2 시작");
        TransactionStatus tx2 = txManager.getTransaction(new DefaultTransactionDefinition());
        log.info("트랜잭션2 커밋");
        txManager.rollback(tx2);
    }
}
profile
진짜 개발자가 되어보자

0개의 댓글