Spring을 사용해서 개발을 하다보면 @Transactional로 여러작업을 하나로 묶어서 사용할 경우도 있고 @Transactional 메소드가 중첩으로 사용 될 때도 있다. 이때 어떤 방식으로 트랜잭션 처리를 할 건지를 정할 수 있는데 이걸 전파속성이라고 말한다.
전파속성은 총 7가지가 있다.
@Transactional의 기본 설정이다.
이 속성은 활성화 된 트랜잭션이 있는지 확인하고 있다면 해당 트랜잭션에 참여 하고, 없다면 새 트랜잭션을 생성하여 사용한다.
@Transactional
메서드a
가 호출 될 때 활성화된 트랜잭션이 있는지 확인 후 없다면 새로운 트랜잭션을 만들고 있다면 트랜잭션에 참여.
Supports는 활성화된 트랜잭션이 있는지 확인하여, 있다면 기존 트렌잭션을 사용하고 없다면 비트랜잭션으로 작업을 진행한다.
@Transactional
메서드a
가 호출 될 때 활성화된 트랜잭션이 있는지 확인 후 있다면 참여하고 없다면 그냥 작업 시작.
활성화 된 트랜잭션이 있다면 참여하지만 없다면 Exception을 호출한다. 이 속성은 혼자서는 실행이 안되며 반드시 활성화된 트랜잭션 작업에서 호출하여 사용해야 한다.
@Transactional
메서드a
이 호출 될 때 참여할 트랜잭션이 없다면 Exception 호출.
Requires_New는 항상 새로운 트랜잭션을 만들어 작업하는 속성이다. 활성화된 트랜잭션이 있는데 새로운 작업을 한다면 기존 트랜잭션은 일시중지하고 새로운 트랜잭션을 만들어 새 작업을 처리한다.
@Transactional
메서드a
는 호출 되면 항상 새로운 트랜잭션을 만들어서 작업한다.
활성화된 트랜잭션이 있는 경우 일시중지 하고 트랜잭션 없이 작업을 진행.
@Transactional
메서드a
는 호출되면 항상 트랜잭션 없이 작업함. 활성화 된 트랜잭션이 있는경우 잠시 멈추고 다른 커낵션으로 작업함.
활성화된 트랜잭션이 있을 경우 Exception을를 호출함. 항상 비트랜잭션 작업을 함.
트랜잭션 작업 중에 @Transactional
메서드a
가 호출 되면 Exception을 호출.
활성화된 트랜잭션이 없으면 일반 트랜잭션 처럼 작동하지만, 활성화 된 트랜잭션이 있다면 호출 된 지점을 기준으로 트랜잭션에 참여하여 동작한다. Required와 비슷해 보이지만 rollback처리를 호출된 지점 기준으로 처리한다.
@Transactional
메서드a
에서 @Transactional메서드b
를 호출 할 때메서드b
의 commit, rollback은메서드a
작업에 영향이 없지만메서드a
의 commit, rollback은메서드b
에게 영향을 미친다.
한 줄평 : 트랜잭션 작업에서 호출되는 메서드를 어떻게 처리 할지 선택할 때 기준이 되는 속성이다.
출처 -
https://www.baeldung.com/spring-transactional-propagation-isolation