1.Spring 事务管理
1.1.Spring 事务概述
事务是一个不可分割的逻辑工作单元,具备ACID特性,实际工作中可借助Spring进行事务管理。
事务四大特性:ACID
1)原子型(一个事务中的多个操作要么都成功要么都失败)
2)一致性(例如存钱操作,存之前和存之后的钱数应该是一致的)
3)隔离性(事务与事务应该是相互隔离的)
4)持久性(事务一旦提交,数据要持久保存)
Spring提供了两种事务管理方式, 编程式事务和声明式事务。编程式事务指的是通过编码方式实现事务控制;声明式事务基于 AOP,将具体业务逻辑与事务处理逻辑解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。
Spring中声明式事务处理有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Transactional 注解的方式。
本讲重点讲解实际项目中最常用的声明式事务管理,以简化事务的编码操作。
1.2.Spring事务案例分析
例如现有两个订单操作,需要更新库存。
当库存充足时两个事务都可以成功,当库存不够时有的事务就要回滚。
假如采用编程方式控制事务:(业务层)
Connection conn=DbUtil.getConnection();
conn.setAutoCommit(false);
try{
….
dao.updateObject(….)
dao.deleteObject(…)
conn.commit();
}catch(SQLException e){
conn.rollback();
}finally{
conn.close();
}
编程式事务处理,代码量比较大,侵入性比较高,维护相对困难。
实际项目中通常会采用代理方式进行事务处理:
1)基于Spring AOP实现(底层是基于JDK动态代理和CGLIB实现)
2)基于JDK 动态代理
3)基于CGLIB 代理
2.Spring 声明式事务处理
2.1.基于注解方式实现
Step1:在spring配置文件中启用事务注解
<bean id="txManager" cla