Does Specifying @Transactional rollbackFor Also Include RuntimeException Does Specifying @Transactional rollbackFor Also Include RuntimeException spring spring

Does Specifying @Transactional rollbackFor Also Include RuntimeException


No need to include RuntimeException in rollbackFor list. It will handle that even if you do not mention it.

I've tried it out for 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 350002 Yogesh 350003 Aditya 35000update exceptionAfter Update1 Deepak 350002 Yogesh 350003 Aditya 35000


However, please note that the Spring Framework's transaction infrastructure code will, by default, only mark a transaction for rollback in the case of runtime, unchecked exceptions; that is, when the thrown exception is an instance or subclass of RuntimeException. (Errors will also - by default - result in a rollback.) Checked exceptions that are thrown from a transactional method will not result in the transaction being rolled back.

Source


So it can roll back with CheckedException as well (RuntimeException by default), example:

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