@Transactional (rollbackFor)

@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 (사용자); 
    }

서비스 요청에 간접적 인 방법,주의 할 점은 없습니다 트리거 업무를 수행

추천

출처www.cnblogs.com/qingmuchuanqi48/p/11832252.html