Spring 事务

Spring 事务

1.事务

逻辑上一组操作,要么一起成功,要么一起失败。

2.事务的特性

原子性,一致性,隔离性(并发事务之间数据相互隔离),持久性(事务提交后,永久保存在数据库)

3.Spring事务接口

  • PlatformTransactionManager 事务管理器

  • TransactionDefinition 事务定义信息

  • TransactionStatus 事务具体运行状态

(1)PlatformTransactionManager

Spring 为不同的持久化框架提供了不同的PlatformTransactionManager 接口实现类

(2) TransactionDefinition

事务隔离级别
  • 脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。

  • 不可重复度:在同一事务中,多次读取同一数据返回的结果有所不同。

  • 虚读/幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。在后来的查询中,第一个事务就会发现有些原来没有的记录。

隔离级别:
  • READ_UNCOMMITED:级别最低,上述都有可能发生。

  • READ_COMMITED:允许在并发事务已经提交后读取,可防止脏读。

  • REPEATABLE_READ:对相同字段的多次读取是一致的,除非事务被事务本身改变。可以防止脏、不可重复读,幻读仍有可能发生。

  • SERIALIZABLE: 完全服从 ACID 的隔离级别,确保不发生脏,幻,不可重复读。典型的通过完全锁定在事务中涉及到数据表来完成的。

  • DEFAULT: 数据库默认的隔离级别,MySQL 为 REPEATABLE_READ。

事务的传播行为:

解决业务层方法之间的相互调用的问题

  • PROPAGATION_REQUIRED: 支持当前事务,如果不存在,就新建一个。

  • PROPAGATION_SUPPORTS: 支持当前事务,如果不存在

  • PROPAGATION_MANDATORY:支持当前事务,如果不存在,就抛出异常。

  • PROPAGATION_REQUIRES_NEW:如果有事务存在,挂起当前事务,创建一个新的事务。

  • PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务。

  • PROPAGATION_NEVER:以非事务方式运行,如果有事务存在,抛出异常。

  • PROPAGATION_NESTED:如果当前事务存在,则嵌套事务执行。

(3)TransactionStatus

4.Spring 事务管理

(1) 使用 XML 配置声明式事务,Spring 的声明式事务是通过 AOP 实现的。

<!-- 配置业务层代理 -->
<bean id = "accountServiceProxy" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!--配置目标对象-->
    <property name = "target" ref = "accountService"/>
    <!--注入事务管理器-->
    <property name = "transactionManager" ref = "transactionManager"/>
    <!--注入事务属性-->
    <property name = "transactionAttributes"/>
        <props>
            <!--
                prop 的格式:
                * PROPAGATION:事务的传播行为;
                * ISOLATION  :事务的隔离级别;
                * readOnly   :只读;
                *-Exception  :发生哪些异常回滚事务;
                *+EXception  :发生哪些异常事务部回滚
                key 值为方法名
            -->
            <prop key = "transfer">PROPAGATION_REQUIRED</prop>
        </props>
</bean>

(2) 基于注解的配置

@Transactional() 属性:

  • PROPAGATION:事务的传播行为;

  • ISOLATION :事务的隔离级别;

  • readOnly :只读;

  • rollbackFor:发生哪些异常回滚;

  • noRollbackFor:发生哪些异常不回滚;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值