美文网首页
Spring事务基础

Spring事务基础

作者: 我是阿周啊 | 来源:发表于2018-03-01 11:36 被阅读0次

    Spring的事务抽象主要包括三个主要接口, 既PlatformTransactionManager, TransactionDefinition和TransactionStatus.以PlatformTransactionManager为中心.

    org.springframework.transaction.TransactionDefinition: 负责定义事务相关属性, 包括隔离级别, 传播行为等.

    org.springframework.transaction.PlatformTransactionManager: 参照TransactionDefinition的属性定义来开启相关事务.

    org.springframework.transaction.TransactionStatus: 负责事务开启之后到事务结束期间的事务状态, 也可以通过TransactionStatus对事务进行有限的控制

    TransactionDefinition定义的事务熟悉包括:

    事务的隔离级别(IsolationLevel),  有五个值:

            ISOLATION_DEFAULT: 表示使用数据库默认的隔离级别, 通常情况下是Read Committed, mysql是REPEATABLE READ

            ISOLATION_READ_UNCOMMITTED: 对应Read Uncommitted隔离级别, 无法避免脏读,不可重复读,幻读

            ISOLATION_READ_COMMITTED: 对应Read Committed隔离级别, 可以避免脏读, 无法避免不可重复读和幻读

            ISOLATION_REPEATABLE_READ: 对应Repeatable read隔离级别, 可避免脏读和不可重复读, 不能避免脏读

            ISOLATION_SERIALIZABLE: 对应Serializable隔离级别, 可以避免所有的脏读,不可重复读和幻读, 但并发效率最低.

    事务的传播行为(PropagationBehavior), 有七个值:

            PROPAGATION_REQUIRED: 如果当前存在一个事务, 则加入当前事务. 如果不存在任何事务, 则创建一个新的事务.通常作为默认值.

            PROPAGATION_SUPPORTS: 如果当前存在一个事务,则加入当前事务, 如果当前不存在事务, 则直接执行. 对一些查询方法比较适合.

            PROPAGATION_MANDATORY: 强制要求当前存在一个事务, 如果不存在则抛出异常.

            PROPAGATION_REQUIRES_NEW: 不管当前是否存在事务, 都会创建新的事务. 如果当前存在事务, 会将当前的事务挂起. 如果某个业务对象所做的事情不想影响到外层事务,如日志, 就算报错也不想当前业务方法回滚.

            PROPAGATION_NOT_SUPPORTED: 不支持当前事务, 在没有事务的情况下执行. 如果当前存在事务, 当前事务原则上会挂起. 之所以说原则上, 需要看对应的PlatformTransactionManager实现类是否支持事务的挂起.

            PROPAGATION_NEVER: 永远不需要事务, 如果存在当前事务, 则抛出异常.

            PROPAGATION_NESTED: 如果存在当前事务, 则在当前事务的一个嵌套事务中执行, 否则与PROPAGATION_REQUIRED的行为类似.

    org.springframework.transaction.support.DefaultTransactionDefinition是TransactionDefinition接口的默认实现类, 提供了各事务的默认熟悉,  并且通过它的setter方法, 可以更改这些属性.

    相关文章

      网友评论

          本文标题:Spring事务基础

          本文链接:https://www.haomeiwen.com/subject/xzxgxftx.html