spring事务学习总结

spring事务 

1.主要有三个接口:PlatformTransactionManager(全局事务管理器)、TransactionDefinition(事务配置相关,如隔离、只读、传播、超时、异常回滚等)、TransactionStatus(有查询事务状态的相关方法,如isNewTransaction、isRollBackOnly等)。

2.Spring事务的隔离级别
 1. ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.hibernate默认为REPEATABLE_READ、oracle默认为READ_COMMITTED;
      另外四个与JDBC的隔离级别相对应
 2. ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
      这种隔离级别会产生脏读,不可重复读和幻像读。
 3. ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
 4. ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
      它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
 5. ISOLATION_SERIALIZABLE(串行化,事务只能排队进行,不能并行) 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
      除了防止脏读,不可重复读外,还避免了幻像读。

3.spring事务的传播级别Propagation :

有以下选项可供使用(标红为常用):

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED--支持当前事务,创建新事务,方法在嵌套事务里执行;无当前事务,创建新事务并和REQUIRED相同。

4.实现spring事物有两种方式:编程式和声明式

(1)编程式

    编程式可以在业务逻辑类上注入xml中配置的TransactionTemplate类;在业务逻辑类中调用TransactionTemplate.execute(new TransactionCallbackWithoutResult(){ });

把需要控制的事物内容放进去即可;

(2)声明式

     1.TransactionProxyFactoryBean代理类配置事物代理bean,一般不推荐,只能一一对应。

     2.xml中配置aop。

       

 <tx:advice id="txAdvice" transaction-manager="transactionManager">
       <tx:attributes>
          <!-- 所有以get开头的方法都是只读的 -->
          <tx:method name="get*" read-only="true"/>
          <!-- 其他方法使用默认的事务设置,超时5s -->
          <tx:method name="*" isolation="DEFAULT" propagation="REQUIRED" timeout="-1"/>
       </tx:attributes>
    </tx:advice>
    <!-- 配置aop元素 -->
    <aop:config>
        <aop:pointcut expression="execution(* com.service.Imp.*Imp.*(..))" id="myPointcut"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/>
    </aop:config>
   3.注解方式配置@Transactional,优点方便,缺点是每个业务类都要配一遍。

PS:<tx:attributes>中还可以包含rollback-for:发生哪些异常进行回滚;no-rollback:发生哪些异常不进行回滚;timeout:超时时长,默认为-1;read-only:只读;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值