SSH与SSM学习之Spring20——Spring事务之Spring相关的基础

来源:互联网 发布:类似ostagram的软件 编辑:程序博客网 时间:2024/06/06 03:13

  • SSH与SSM学习之Spring20Spring事务之Spring相关的基础
    • 一 PlatformTransactionManager 接口
    • 二Spring事务管理的属性
      • 1 事务隔离级别 isolation
      • 2 事务传播行为 propagation
      • 3 是否只读 read-only

SSH与SSM学习之Spring20——Spring事务之Spring相关的基础

一、 PlatformTransactionManager 接口

因为在不同平台,操作事务的代码各不相同。所以spring提供了一个接口 PlatformTransactionManager

Spring中,事务管理最重要的就是 TransactionManager对象

例如:PlatformTransactionManager的实现类

DataSourceTransactionManager jdbc事务管理

HibernateTransitionmanager hibernate事务管理


二、Spring事务管理的属性

2.1 事务隔离级别 isolation

事务的隔离级别

1 读未提交

2 读提交

4 可重复读

8 串行化

isolation表示事务的隔离级别,对应的值是

1 READ_UNCOMMITTED 读未提交

2 READ_COMMITTED 读提交

4 REPEATABLE_READ 可重复读

8 SERIALIZABLE 串行化

在Spring中定义的其实是一个枚举

public enum Isolation {    DEFAULT(TransactionDefinition.ISOLATION_DEFAULT),    READ_UNCOMMITTED(TransactionDefinition.ISOLATION_READ_UNCOMMITTED),    READ_COMMITTED(TransactionDefinition.ISOLATION_READ_COMMITTED),    REPEATABLE_READ(TransactionDefinition.ISOLATION_REPEATABLE_READ),    SERIALIZABLE(TransactionDefinition.ISOLATION_SERIALIZABLE);    private final int value;    Isolation(int value) { this.value = value; }    public int value() { return this.value; }}
public interface TransactionDefinition {    ...........    int ISOLATION_DEFAULT = -1;    int ISOLATION_READ_UNCOMMITTED = Connection.TRANSACTION_READ_UNCOMMITTED;    int ISOLATION_READ_COMMITTED = Connection.TRANSACTION_READ_COMMITTED;    int ISOLATION_REPEATABLE_READ = Connection.TRANSACTION_REPEATABLE_READ;    int ISOLATION_SERIALIZABLE = Connection.TRANSACTION_SERIALIZABLE;    ...........}
public interface Connection  extends Wrapper, AutoCloseable{    ......    int TRANSACTION_READ_UNCOMMITTED = 1;    int TRANSACTION_READ_COMMITTED   = 2;    int TRANSACTION_REPEATABLE_READ  = 4;    int TRANSACTION_SERIALIZABLE     = 8;    ......}

2.2 事务传播行为 propagation

事务的传播行为指的是,多个业务方法嵌套条用,各自有操作了数据,它们之间事务的管理问题。

如图所示,多数情况下使用的是 PROPAGATION_REQUIRED 或者说 REQUIRED

这里写图片描述

PROPAGION_XXX :事务的传播行为* 保证同一个事务中PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认)PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常* 保证没有在同一个事务中PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务传智播客——专注于 Java、 .Net 和 Php、网页平面设计工程师的培训PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

2.3 是否只读 read-only

这个属性配置,当前的事务是否是只读的,true为只读,false为可写。如果是只读,事务中有写操作是会报错的。

阅读全文
0 0