spring支持声明式事务(用配置的形式,最常用就是加一个注解)和编程式事务(代码体现)。
Spring事务传播行为包括以下七种:
-
REQUIRED(默认):在当前事务范围内执行。如果当前没有事务,则开启一个新的事务。如果在方法执行期间发生异常,则回滚事务。
-
SUPPORTS:在当前事务范围内执行。如果当前没有事务,则不会开启新的事务,而是以非事务方式执行方法。
-
MANDATORY:在当前事务范围内执行。如果当前没有事务,则抛出异常。
-
REQUIRES_NEW:总是开启新事务,并在它自己的事务中执行。如果一个事务已经存在,它将被挂起。如果在方法执行期间发生异常,则回滚新事务。
-
NOT_SUPPORTED:以非事务方式执行。如果一个事务已经存在,则将它挂起。
-
NEVER:以非事务方式执行。如果一个事务已经存在,则抛出异常。
-
NESTED:在当前事务范围内执行一个嵌套的事务。如果当前没有事务,则开启一个新的事务。如果在方法执行期间发生异常,则只回滚嵌套事务,而不会回滚外部事务。
总的来说,Spring的事务传播行为非常灵活,可以根据需要进行配置。开发人员需要考虑业务逻辑和数据一致性的要求,以确定应该使用哪种传播行为。