0
点赞
收藏
分享

微信扫一扫

spring事务的传播性与隔离性

快乐小码农 2023-07-13 阅读 45

spring事务的传播性

  1. REQUIRED(必须的)(TransactionDefinition.PROPAGATION_REQUIRED) 使用当前的事务,如果当前没有事务,则自己新建一个事务,子方法是必须运行在一个事务中的,如果当前存在事务,则加入这个事务,成为一个整体。
  2. SUPPORTS(支持)(TransactionDefinition.PROPAGATION_SUPPORTS) 如果当前父级方法中有事务,则使用事务,如果没有,则不使用。
  3. MANDATORY(强制的)(TransactionDefinition.PROPAGATION_MANDATORY) 这个则会强制要求父级调用者添加事务,否则会报如下错误;org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation
  4. REQUIRES_NEW(必须创建新的)(TransactionDefinition.PROPAGATION_REQUIRES_NEW) 如果当前有事务,则挂起该事务,并且创建一个新的事务给自己用。如果当前没有事务,则同REQUIRED。
  5. NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED) 如果当前有事务,则把该事务挂起,自己不执行。
  6. NEVER(TransactionDefinition.PROPAGATION_NOT_SUPPORTED) 调用方不允许有任何的事务。
  7. NESTED(TransactionDefinition.PROPAGATION_NESTED) 调用方发生异常,子事务也会受影响回滚。子事务 发生异常,则也会回滚,但是,如果我们给被调用方加上trycatch的话,则就算被调用方发生了异常,也不会影响调用方的执行。

spring事务的隔离性

  1. DEFAULT(默认)(TransactionDefinition.ISOLATION_DEFAULT

    默认的隔离级别,使用数据库默认的事务隔离级别,除了ISOLATION_DEFAULT其它几个Spring事务隔离级别与JDBC事务隔离级别相对应

  2. READ_UNCOMMITTED(读未提交)(TransactionDefinition.ISOLATION_READ_UNCOMMITTED)

    一个事务可以读取另外一个事务未提交的数据,这可能出现脏读 而且不可重复度,出现幻像读等

  3. READ_COMMITTED(读已提交)(TransactionDefinition.ISOLATION_READ_COMMITTED)

    一个事务可以读取另一个事务已经提交的数据,不可以读取未提交的数据,可以避免脏读 但是无法避免不可重复读和幻像读

  4. REPEATABLE_READ(可重复读)(TransactionDefinitionISOLATION_REPEATABLE_READ)

    一个事务可以读取另外一个事务已经提交的数据,可以避免脏读的前提下,也可以避免不可重复读但是还是无法避免幻像读

  5. SERIALIZABLE(串行化)(TransactionDefinitionISOLATION_SERIALIZABLE)

    可以避免脏读 幻像读和不可重复读,事务被处理为顺序执行,但资源消费高

举报

相关推荐

0 条评论