복붙노트

[SPRING] @Transactional rollbackFor를 지정하면 RuntimeException도 포함됩니까?

SPRING

@Transactional rollbackFor를 지정하면 RuntimeException도 포함됩니까?

@Transactional(rollbackFor = MyCheckedException.class)
public void foo() {
    throw new RuntimeException();    
}

이 트랜잭션이 롤백 되나요, 아니면 RuntimeException.class를 주석에 포함해야합니까?

해결법

  1. ==============================

    1.rollbackFor 목록에 RuntimeException을 포함 할 필요가 없습니다. 비록 당신이 그것을 언급하지 않더라도 그것을 처리 할 것입니다. 나는 jdbcTemplate을 위해 그것을 시도했다 : -

    rollbackFor 목록에 RuntimeException을 포함 할 필요가 없습니다. 비록 당신이 그것을 언급하지 않더라도 그것을 처리 할 것입니다. 나는 jdbcTemplate을 위해 그것을 시도했다 : -

    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = MyException.class)
    public void updateSalary(final int increment){
        jdbcTemplate.update("update EMPLOYEE set emp_salary = emp_salary + ?", increment);
        throw new RuntimeException("update exception");
    }
    
    Output:
    After Insertion:
    1 Deepak 35000
    2 Yogesh 35000
    3 Aditya 35000
    
    update exception
    After Update
    1 Deepak 35000
    2 Yogesh 35000
    3 Aditya 35000
    
  2. ==============================

    2.출처

    출처

  3. ==============================

    3.그래서 CheckedException과 함께 롤백 할 수 있습니다 (기본값은 RuntimeException). 예를 들면 다음과 같습니다.

    그래서 CheckedException과 함께 롤백 할 수 있습니다 (기본값은 RuntimeException). 예를 들면 다음과 같습니다.

    @Transactional(rollbackFor = Exception.class)
    public void save(Book book) throws Exception {
        bookRepository.save(book);
        System.out.println("Saved in transcation.");
        // No data is persisted
        if (true) {
            throw new Exception();
        }
    }
    
  4. from https://stackoverflow.com/questions/12830364/does-specifying-transactional-rollbackfor-also-include-runtimeexception by cc-by-sa and MIT license