java明确区分两种类型的异常.checked exceptions和unchecked exceptions
那些扩展了java.lang.Exception的异常称为checked exceptions, 编译器要求这些异常必须被捕获或者重新抛出. 那些扩展了java.lang.RuntimeException的异常称为unchecked exceptions, 它们不是必须捕获的. 当然, 也可以捕获这些异常并相应地扩展调用栈, 就像通常对checked exceptions做的那样.
在Spring中默认checked exceptions不进行回滚,unchecked exceptions进行回滚。
对于checked exceptions可以用@Transactional(RollbackFor=异常类名)实现回滚,对于unchecked exceptions可以用@Transactional(noRollbackFor=异常类名)实现不回滚。
Spring中事务的传播属性:
PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。它只对DataSourceTransactionManager有效。