집안 사정으로 인해 지난주에 TIL을 하지 못했다. 지지난주부터 조짐이 있었는데 일이 터져버리는 바람에 어쩔 수가 없었다. 이번 주부터는 열심히 다시 시작해보려고 한다.
스프링 @Transactional 애너테이션의 propagation 옵션
Propagation.REQUIRED: 기본값. 부모 트랜잭션 있으면 부모 트랜잭션 내에서 실행. 없으면 새로운 트랜잭션 생성.
자식 트랜잭션 내 예외 발생 시 부모 트랜잭션도 롤백.
Propagation.REQUIRED_NEW: 항상 새로운 트랜잭션 생성.
부모 트랜잭션과 자식 트랜잭션이 독립적이므로, 자식 트랜잭션 내에서 예외 발생 시 자식 트랜잭션만 롤백되고 부모 트랜잭션은 롤백 안 됨.
Propagation.NESTED: 해당 메서드가 부모 트랜잭션에서 진행될 경우 별개로 커밋되거나 롤백될 수 있다.
둘러싼 부모 트랜잭션이 없을 경우 Propagation.REQUIRED와 동일하게 작동한다. 차이점은 SAVEPOINT를 지정한 시점까지 부분 롤백이 가능하다.(SAVEPOINT 지원 데이터베이스만 사용 가능)
Propagation.MANDATORY: 부모 트랜잭션이 있을 경우에만 실행. 그렇지 않으면, 예외 발생.
-> 혼자서는 사용 불가.
Propagation.SUPPORTS: 부모 트랜잭션이 있으면 부모 트랜잭션으로 동작하고, 그렇지 않으면 non-transactional로 동작.
-> 자식 트랜잭션으로서만 사용, 그 외에는 트랜잭션을 사용하지 않음.
Propagation.NOT_SUPPORT: non-transactional로 실행, 부모 트랜잭션이 존재하면 일시 정지.
-> 트랜잭션을 사용하지 않음. 사용하면 일단 보류.
Propagation.NEVER: non-transactional로 실행, 부모 트랜잭션이 존재하면 예외 발생.
-> 트랜잭션을 사용하지 않음. 사용하면 예외.
'📔개발자 일기 | | TIL' 카테고리의 다른 글
[20220330] 개발자 일기 (0) | 2022.03.30 |
---|---|
[20220329] 개발자 일기 & TIL (0) | 2022.03.29 |
[20220321] 개발자 일기 & TIL (0) | 2022.03.21 |
[20220317] 개발자 일기&TIL (0) | 2022.03.17 |
[20220316] 개발자 일기 & TIL (0) | 2022.03.16 |