spring事务的传播性
- REQUIRED(必须的)(TransactionDefinition.PROPAGATION_REQUIRED) 使用当前的事务,如果当前没有事务,则自己新建一个事务,子方法是必须运行在一个事务中的,如果当前存在事务,则加入这个事务,成为一个整体。
- SUPPORTS(支持)(TransactionDefinition.PROPAGATION_SUPPORTS) 如果当前父级方法中有事务,则使用事务,如果没有,则不使用。
- MANDATORY(强制的)(TransactionDefinition.PROPAGATION_MANDATORY) 这个则会强制要求父级调用者添加事务,否则会报如下错误;
org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation
- REQUIRES_NEW(必须创建新的)(TransactionDefinition.PROPAGATION_REQUIRES_NEW) 如果当前有事务,则挂起该事务,并且创建一个新的事务给自己用。如果当前没有事务,则同REQUIRED。
- NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED) 如果当前有事务,则把该事务挂起,自己不执行。
- NEVER(TransactionDefinition.PROPAGATION_NOT_SUPPORTED) 调用方不允许有任何的事务。
- NESTED(TransactionDefinition.PROPAGATION_NESTED) 调用方发生异常,子事务也会受影响回滚。子事务 发生异常,则也会回滚,但是,如果我们给被调用方加上trycatch的话,则就算被调用方发生了异常,也不会影响调用方的执行。
spring事务的隔离性
-
DEFAULT(默认)(TransactionDefinition.ISOLATION_DEFAULT)
默认的隔离级别,使用数据库默认的事务隔离级别,除了ISOLATION_DEFAULT其它几个Spring事务隔离级别与JDBC事务隔离级别相对应
-
READ_UNCOMMITTED(读未提交)(TransactionDefinition.ISOLATION_READ_UNCOMMITTED)
一个事务可以读取另外一个事务未提交的数据,这可能出现脏读 而且不可重复度,出现幻像读等
-
READ_COMMITTED(读已提交)(TransactionDefinition.ISOLATION_READ_COMMITTED)
一个事务可以读取另一个事务已经提交的数据,不可以读取未提交的数据,可以避免脏读 但是无法避免不可重复读和幻像读
-
REPEATABLE_READ(可重复读)(TransactionDefinitionISOLATION_REPEATABLE_READ)
一个事务可以读取另外一个事务已经提交的数据,可以避免脏读的前提下,也可以避免不可重复读但是还是无法避免幻像读
-
SERIALIZABLE(串行化)(TransactionDefinitionISOLATION_SERIALIZABLE)
可以避免脏读 幻像读和不可重复读,事务被处理为顺序执行,但资源消费高