spring对事务的支持

来源:互联网 发布:内存条哪个牌子好 知乎 编辑:程序博客网 时间:2024/05/18 07:53

Spring中的事务可分为两种:程控式事务和声明式事务。

 

Spring不直接管理事务,它只提供事务管理器,将对事务的管理委托给第三方持久平台。

事务管理器

第三方持久平台

Jdbc.datasource.DataSourceTransactionManager

jdbc

Orm.hibernate.HibernateTransactionManager

Hibernate2

Orm.hibernate3.HibernateTransactionManager

Hibernate3

  

 

一、程控式事务

二、声明式事务

五个基本特性:1. 传播特性(Propagation) 2. 隔离级别(Isolation) 3. 回滚机制(Rollback Rules) 4. 超时(TimeOut) 5. 只读(Read-Only)

1. Spring支持的传播特性:

 

传播特性

意义

PROPAGATION_MANDATORY

表示该方法一定要在一个事务中运行,没有事务就抛异常。

PROPAGATION_NESTED

 

PROPAGATION_NEVER

表示该方法不该在一个事务中运行,若当前有事务就抛异常

PROPAGATION_NOT_SUPPORTED

表示该方法不该在一个事务中运行,若当前有事务,在该方法的运行期间,将挂起该事务

PROPAGATION_REQUIRED

必须在一个事务中运行,如果当前已经有事务,就在旧的事务中运行,否则启动一个新的事务。

PROPAGATION_REQUIRED_NEW

一个方法一个事务,没有事务,启动一个新的事务,有事务,挂起旧的事务,现启动一个新的事务。

PROPAGATION_SUPPORTS

一个方法有事务就在事务中运行,没事务就不在事务中运行

2. Spring支持的隔离级别

脏读

 

不可重复读

事务一:select name from test where id = 1; //张三

事务二:update test set name = ‘李四’ where id = 1;

事务一:select name from test where id = 1; //李四

第一次读是“张三”第二次读就变成“李四”了。

幻读

事务一:update test set name = ‘张三’;//把所有人的姓名都变成张三

事务二:insert into test values(100,’李四’);

事务一:select name from test;//怎么出现李四了。

3. Spring默认只支持“运行时”异常的回滚机制,不支持可捕捉异常的回滚。

4.Spring声明式事务的应用