Spring the @Transanctional 单独使用时默认设置
readyOnly=false,propagation=required,isolation=readCommitted,exception no rollback
propagation_required
如果已经存在事物,则在当前事物中运行,如果没有事物,则开始一个新事物
propagation_supports
如果已经存在事物,则在当前事物中运行,如果没有事物,则在飞事物中运行
propagation_mandatory
如果已经存在事物,则在当前事务中运行,如果没有事物,则抛出异常
org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory'at 。。。
propagation_required_new
总开启新事务,如果已经有事物,则将那个事物挂起
propagation_not_supported
总在非事物中执行,如果已经有事物,则将事务挂起
propagation_never
总在非事物中执行,如果已经有事物,则抛出异常
propagation_nested
如果存在当前事务,则在当前事务的一个嵌套事务中执行,否则与PROPAGATION_REQUIRED的行为类似,即创建新的事务,在新创建的事务中执行。
PROPAGATION_REQUIRES_NEW新创建的事务虽然是在当前外层事务内执行,但新创建的事务是独立于当前外层事务而存在的,二者拥有各自独立的状态而互不干扰; 而PROPAGATION_NESTED创建的事务属于当前外层事务的内部子事务(sub-transaction),内部子事务的处理内容属于当前外层事务的一部分,而不能独立于外层事务而存在