spring事务管理

一、Spring事务管理相关三个高层抽象接口

1. PlatformTransactionManager 平台相关事务管理器

提供 commit 提交事务、 getTransaction 获取事务状态 、rollback 事务回滚

不同持久层框架,需要不同事务管理器,来提供事务管理代码

JDBC事务管理

       开启事务 connection.setAutoCommit(false)

       提交事务 connection.commit();

       回滚事务 connection.rollback();

Hibernate事务管理

       开启事务 session.beginTransaction();

       提交事务 session.getTransaction().commit();

       回滚事务 session.getTransaction().rollback(); 

2. TransactionDefinition 事务管理定义信息

TransactionDefinition对象,对应在配置文件中,进行事务管理相关配置信息

getIsolationLevel 获取事务隔离级别

getPropagationBehavior 获取事务传播行为

getTimeOut 获取超时时间

isReadOnly 是否只读

Spring 事务管理,进行配置包括(隔离级别、 传播行为、 超时时间、 是否只读

 

什么是事务传播行为?

事务传播行为用于解决2个被事务管理的方法相互调用问题。

事务传播行为解决问题是,两个被事务管理方法互相调用,当一个方法出错时,另一个方法是否回滚

REQUIRED(默认值)、SUPPORTS、MANDATORY : 同一个事务(删除用户、删除订单)

REQUIRES_NEW、NOT_SUPPORTED、NEVER : 处于不同的事务 (ATM取款)

NESTED 嵌套事务:只对DataSourceTransactionManager 有效 ,在同一个事务设置保存点,回滚到保存点,根据业务进行事务提交或者回滚

3. TransactionStatus 事务管理状态信息

flush 刷出、hasSavePoint 是否有保存点、isCompleted 事务是否完成、isNewTransaction 是否为新的事务、isRollbackOnly 事务事务回滚、 setRollbackOnly 事务设置为回滚

小结:

       Spring要进行事务管理,使用PlatformTransactionManager 进行事务事务管理,如何管理? 根据TransactionDefinition 定义信息管理 , 在事务管理过程中通过TransactionStatus 查看事务的状态

二、spring事务管理方式

第一种: 编程式事务管理

       要手动编写事务管理代码,有代码侵入

1)    在配置文件,配置事务管理器 TransactionManager

2)    将TransactionManager 交给 TransactionTemplate

3)    将TransactionTemplate 注入到代码

transactionTemplate.execute(new TransactionCallbackWithoutResult(){

       Object doInTransaction(TransactionStatus status) {

              // 需要事务管理的代码

}

});

 

第二种: 声明式事务管理 (推荐)

       只需要通过配置,无需修改原来代码,添加事务管理功能 (底层 AOP 环绕通知)

1)    配置TransationManager

2)    将TransactionManager 交给 TransactionInterceptor 环绕通知

3)    配置切入点和切面

代码如下:

posted @ 2015-11-03 10:33  自相矛盾  阅读(210)  评论(0编辑  收藏  举报