12Spring的事务处理二

来源:互联网 发布:淘宝账户名怎么修改 编辑:程序博客网 时间:2024/06/16 03:02

Spring的持久层封装

传统的JDBC数据访问技术的一般流程是:

获取数据源

根据数据源获取链接

设定事务开始

执行相应的操作

最后执行成功则提交

执行失败则回滚

分布式事务处理——分布式事务处理即事务分布在多个资源上、由多个组件共享的事务,其特点:

         组件在同一原子操作(原子性)中同多个资源通信。

         多个组件要在同一原子操作中操作。

         分布式事务需要多个不同的事务管理器的合作。

Spring提供了编程式事务处理以及声明式事务处理。

——spring的事务处理基于动态AOP实现。

         默认情况下,使用java的动态代理,但是因为必须实现一个接口,所以对于没有实现接口的javaBean,spring通过CGLIB实现。

Spring的事务中心接口是org.springframework.transaction.PlatformTransactionManager.class。

里面有三个方法:

1.获取当前事务对象

TransactionStatusgetTransaction(TransactionDefinitiondefinition)throwsTransactionException;

2.提交事务 2

   voidcommit(TransactionStatusstatus)throwsTransactionException;

3.事务回滚

voidrollback(TransactionStatusstatus)throwsTransactionException;

TransactionManager就是该接口的一个实现类。

TransactionDefinition也是一个接口其中定义了事务处理的部分属性定义。

intgetPropagationBehavior();——获取事务的传播性

intgetIsolationLevel();——获取事务的隔离层次

intgetTimeout();——获取事务是否超时

booleanisReadOnly();——获取是否为只读事务

StringgetName();——获取事务名称

 

interfaceTransactionStatusextendsSavepointManager,Flushable

 

代表了目前的事务,可以通过setRollbackOnly()来设定只读事务。

booleanisNewTransaction();

判断是否为一个新事务

 

 

booleanhasSavepoint();

判断有无保存点

 

voidsetRollbackOnly();

设为只读事务

booleanisRollbackOnly();

判断是否为只读事务

   voidflush();

刷新事务

   booleanisCompleted();

判断事务是否完成

编程式事务管理

TransactionTemplate能够以编程方式实现事务管理,其无状态切线程安全,其实例需要PlatformTransactionManaer的实例。

TransactionTemplate类继承了DefaultTransactionDefinition(默认事务定义)类,同时实现了TransactionOperations接口(事务操作)和InitializingBean接口。

该类的实例需要提供一个PlatformTranactionManager接口的一个实例对象。

PlatformTranactionManager实例对象可以通过构造方法传入。

两种构造方法。

之后其提供了三个方法。
1.执行完毕后调用的方法

2.执行事务处理的方法

3.发生异常时rollback的方法

使用TransactionTemplate比较简单,因为其实只需要调用execute方法就可以。

声明式事务管理

——spring的事务处理基于AOP实现,所以需要使用aopalliance.jar和cglib-nodep.jar包。

//Spring的声明式事务处理同样需要一个PlatformTransactionManager的一个实例。

数据源——数据源事务管理类——声明式事务管理

 

!!

若事务操作比较少,使用编程式事务管理,比较多使用声明式事务管理。

 

声明式事务管理可以使事务处理同业务逻辑分离。

 

 

0 0
原创粉丝点击