22년 12월 작성한 글입니다.
@Transactional
어노테이션을 통해 트랜잭션을 처리합니다.TransactionManager
를 통해 트랜잭션 전략을 제공PlatformTransactionManager
: 명령형 트랜잭션ReactiveTransactionManager
: 리액티브 트랜잭션PlatformTransactionManager
가 던지는 TransactionException
는 unchecked 예외PlatformTransactionManager#getTransaction(TransactionDefinition)
은 TransactionDefinition
에 따른 TransactionStatus
를 반환한다.TransactionDefinition
은 Propagation
, Isolation
, Timeout
, Read-Only
를 정의Propagation
: 트랜잭션이 이미 존재할때, 어떻게 행동할지 정의Isolation
: 트랜잭션 격리 레벨Timeout
: 타임아웃Read-Only
: 트랜잭션 내에서 읽기만 수행할때 사용TransactionStatus
는 새로운 트랜잭션 혹은 기존에 존재하는 트랜잭션임. 그리고 현재 실행중인 스레드와 연관이 있음DataSourceUtils
(JDBC)EntityManagerFactoryUtils
(JPA)SessionFactoryUtils
(Hibernate)TransactionAwareDataSourceProxy
를 사용하여 리소스의 생성과 재사용, 정리를 프록시TransactionInterceptor
와 TransactionManager
사용RuntimeException
의 자식) 와 Error
발생시 롤백Ordered
를 구현하여 적용 순서를 조정할수 있음@Transactional
@Configuration
+ @EnableTransactionManagement
를 적용하여 사용 가능org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
에서 해당 어노테이션 적용AdviceMode
와 프록시 방법을 정의할수 있음 (기본은 PROXY
, JDK DynamicProxy)TransactionAttributeSource
를 통해 protected, package-visible 메서드에도 적용 가능TransactionTemplate
사용PlatformTransactionManager
사용TransactionalOperator
사용ReactiveTransactionManager
사용@TransactionalEventListener
사용