spring提供了编程式事务和声明式事务两种方式来管理事务。编程式的事务控制的粒度更细,可以达到代码块级别,而声明式事务只能到达方法级别,不过可以通过变通,例如将需要事务的代码块,抽离出一个方法来达到细粒度的控制。
为了界定多个事务的边界,spring提供了以下的传播级别:
propagation_required:默认级别,如果当前存在事务,则加入当前事务,如果当前不存在事务,则创建一个新 的事务。
propagation_supported:如果当前存在事务,则加入当前事务,如果当前不存在事务,则以非事务的方式运行
propagation_not_supported:如果当前存在事务,则挂起当前事务,如果当前不存在事务,则以非事务的方式 运行。
propagation_never:如果当前存在事务,则抛出异常,如果当前不存在事务,则以非事务的方式运行
propagation_madatory:如果当前存在事务,则加入当前事务,如果当前不存在事务,则抛出异常
propagation_nested:如果当前存在事务,则创建一个事务,作为嵌套事务,如果当前不存在事务,则相当于
propagation_required.
propagation_requiresnew:如果当前存在事务,则挂起当前事务,创建一个新的事务,如果当前不存在事务,则创建一个新的事务。
spring对事务的管理非常灵活,例如默认只对unchecked 异常进行回滚,我们可以通过配置roll_back_for和
no_roll_back_for这两个属性来进行灵活的配置.