一.Spring事务
配置方式
项目通过声明式事务中的拦截器方法实现事务管理。
首先配置TransactionIntercepter,包括他的属性TransactionManager(HibernateTransactionManager),以及事务属性:传播属性与只读,通过transactionAttribute指定
然后利用BeanNameAutoProxyCreator,是一个根据bean名生成自动代理的代理创建器,指定beanName与拦截器,实现将事务动态织入指定bean的功能。
Spring事务管理关键抽象
包括三个部分:事务管理器、事务属性以及事务状态(运行时的状态)
1)事务管理器PlatformTransactionManager:管理事务提交或回滚(!就只有这俩主要功能)
a.接口方法:getTransaction(TransactionDefinition definition)
commit(TransactionStatus status):根据事务状态提交事务
rollback(TransactionStatus status):若提交时抛出异常,将隐式回滚
2)事务属性TransactionDefinition:用于描述事务的隔离级别、超时时间、是否为只读事务和事务传播规则等控制事务具体行为的事务属性
a.事务隔离:四中隔离级别,默认与底层数据库的一致(Oracle 读已提交,Mysql 可重复读)
b.事务传播:当有事务嵌套发生时,我们需要用设置传播行为控制当前事务如何传播到被嵌套的方法中去。
Propagation_required:当前如果没有事务,则新建。如果有事务,则加入这个事务中(最常用)
Propagation_support:支持当前事务,当前如果没有事务,则以非事务方式运行
Propagation_mandatory:使用当前事务,若无则抛出异常
Propagation_required_new:新建事务,若有,则挂起
Propagation_never:非事务方式,若有,抛出异常
Propagation_not_support:非事务方式,若有,则挂起
Propagation_nested:若存在,在被嵌套事务中执行,若无,则加入(与父事务相依 有savepoint)
c.事务超时:TIMEOUT_DEFAULT:事务运行多久苏安超市。超市后事务将会回滚。
d.只读状态:设置为只读事务,该事务不能修改任何数据。
3)事务状态TransactionStatus:代表一个事务的具体运行状态
事务管理器通过该接口可以:a.获取一个事物的运行状态
b.间接的回滚事务(更具有可控性)
c.继承自SavePointManager接口,具有分段事务控制能力。
网友评论