반응형
한 트랜젝션에서 서로 다른 DB에 update/insert 작업을 연속적으로 하게 될 때 이를 하나의 트랜젝션으로 보존할 수 있도록 스프링에서는 ChainedTransactionManager라는 클래스를 제공해주었다.
물론 이는 1, 2 -> 2, 1 구조로 완벽한 commit/rollback 로직은 아니었지만, 대부분/정상적인/예측 가능한 로직 상 사용 가능한 대안이었다.
참고) 1, 2 -> 2, 1 구조란?
위와 같은 구조로 2 커밋 후 1 롤백 시, 2가 롤백되지 않는 단점이 있다.
참고) 완벽한 로직이 아닌 이유: https://taes-k.github.io/2020/06/09/chained-transaction-manager/
허나 springboot 2.6.2에서 사용하려고 봤더니 아래와 같이 deprecated 되었다고 나오는 것이 아닌가..
//deprecated since 2.5
@Deprecated
public class ChainedTransactionManager implements PlatformTransactionManager
그래서 대안이 뭔고 봤더니, TransactionSynchronization를 사용하라고 한다.
Instead of using ChainedTransactionManager for attaching callbacks to transaction commit (pre commit/post commit), either register a TransactionSynchronization to explicitly follow transaction cleanup with simplified semantics in case of exceptions.
See Also: TransactionSynchronization.beforeCommit(boolean), TransactionSynchronization.afterCommit()
저게 어떤 역할을 하는지, 어떻게 사용하는지는.. 좀 더 공부가 필요하다.
참고)
chainedTransactionConfig? https://techfinanceworld.com/?p=494
스프링 진영에서 없애려는 이유 https://github.com/spring-projects/spring-data-commons/issues/2232
728x90
반응형
'개발 > spring' 카테고리의 다른 글
[transaction] rollback works only for unchecked exception (0) | 2022.03.30 |
---|---|
[actuator] prometheus 설정하기 (0) | 2022.03.17 |
[logback] Reflective setAccessible(true) disabled (0) | 2022.03.16 |
[spring] filter vs OncePerRequestFilter vs interceptor (0) | 2022.03.02 |
[annotation] NotNull NotBlank NonNull NotEmpty... (0) | 2022.02.11 |