@Transactional 노트는 두 가지, 하나 제공하는 스프링이 있습니다
성능에서 내 제한된 테스트에서이 두 가지 사항은 동일합니다.
@org.springframework.transaction.annotation.Transactional
, 다른 하나는 JDK 제공입니다
@javax.transaction.Transactional
. 롤백 설정에, 스프링은 그 제공
rollbackFor
이 제공 JDK,
rollbackOn
사용 된 방법에 일치한다.
성능에서 내 제한된 테스트에서이 두 가지 사항은 동일합니다.
어디에 사용하는
@Transactional
두 방법 중 하나에 쓸 수있는 노트는 클래스에 쓸 수 있습니다. 클래스에 서면 그 클래스의 모든 public 메소드는 업무를해야합니다. 이러한 방법은 더 나은 방법은 당신이 트랜잭션을 추가 할 방법에 표시되도록 명확하게 트랜잭션을 생성 할 트랜잭션을 필요로하지 않습니다 @Transactional
.
rollbackFor
@Transactional
트리거는 여러 지정할 수 있습니다 트랜잭션 롤백의 rollbackFor 예외 유형을 지정하는 데 사용할 수 있습니다, 쉼표로 구분.
rollbackFor
기본값은 RuntimeException을 및 오류를 포함하여, UncheckedException입니다.
우리가 직접 사용하는 경우 @Transactional
지정하지 rollbackFor
예외와 그 서브 클래스는 롤백을 트리거하지 않을 때.
공공 클래스 BusinessException는 확장 예외 { 공공 BusinessException (문자열 MSG) { 슈퍼 (MSG)를; } }
@Autowired 개인 UserRepository의 userRepository을; // 不回滚 @Transactional 공공 무효 TEST1은 () 가 발생 예외 { 사용자의 사용자 = 새 사용자 (1, "15000000000", "d243ewa을", "쉼표" ); saveUser (사용자); 던질 새로운 예외 ( "TEST1 오류" ); } // 不回滚 @Transactional 공공 무효 test11 ()가 발생 예외 { 사용자의 사용자 = 새 사용자 (1, "15000000000", "d243ewa을", "쉼표" saveUser (사용자); 던져 새로운 BusinessException ( "test11 오류" ); } // 回滚 @Transactional (. rollbackOn = 예외 클래스 ) 공공 무효 TEST2은 () 가 발생 예외 { 사용자의 사용자 = 새 사용자 (1, "15000000000", "d243ewa을", "쉼표" ); saveUser (사용자); 던질 새로운 예외 ( "TEST2 오류" ); } //이 回滚 @Transactional은 (rollbackOn는 = 예외입니다. 클래스 ) 공공 무효 test21은 () 가 발생합니다예외 { 사용자의 사용자 = 새 사용자 (1, "15000000000", "d243ewa", "쉼표" ); saveUser (사용자); 던져 새로운 BusinessException ( "test21 오류" ); } // 回滚 @Transactional 공공 무효 TEST3 () { 사용자의 사용자 = 새 사용자 (1, "15000000000", "d243ewa", "쉼표" ); saveUser (사용자); 던져 새로운 RuntimeException을 ( "TEST3 런타임 오류" ); 슬로우 예외 { 사용자 사용자 = 새로운 사용자 (1, "15000000000", "d243ewa를", "콤마" ); test41 (사용자); 던질 새로운 예외 ( "테스트 4 오류" ); } @Transactional (rollbackOn = 예외입니다. 클래스 ) 공공 무효 test41 (사용자 사용자) { saveUser (사용자); } // 不回滚 공공 무효 test5는 () 가 발생 BusinessException { ) (TEST6을; } // 回滚 @Transactional (rollbackOn = 예외입니다. 클래스) 공공 공극 TEST6 ()이 발생 BusinessException { 사용자 사용자 = 새 , 사용자 (1 "15000000000", "d243ewa", "콤마" ); saveUser (사용자); 던져 새로운 BusinessException ( "TEST6 오류" ); } // 回滚 @Transactional (rollbackOn = 예외. 등급 ) 공개 공극 test7 ()가 발생 BusinessException { TEST8을 (); } 공공 무효 TEST8는 () 가 발생 BusinessException { 사용자 사용자 =을새로운 사용자 (1, "15000000000", "d243ewa", "쉼표" ); saveUser (사용자); 던져 새로운 BusinessException ( "TEST8 오류" ); } 공공 사용자 saveUser (사용자 사용자) { 반환 userRepository.save (사용자); }
서비스 요청에 간접적 인 방법,주의 할 점은 없습니다 트리거 업무를 수행