读书人

Spring 事务管理-二

发布时间: 2012-10-26 10:30:59 作者: rapoo

Spring 事务管理-2
接 Spring 事务管理-1

1--在Spring中编写事务


 1,事务的控制只能做到方法的级别。
2,所有的事务策略都是依靠5个参数来控制。
下面看看这5个参数

第一个 PROPAGATION

  第二个 Isolation(隔离级别)  
1 隔离级别定义一个事务可能受其他并发事务活动影响的程度
2 也可以想象为那个事务对于事务处理数据的自私程度

为什么要用隔离级别,因为并发导致了很多问题:
问题一Dirty read(脏读)
 第三个 只读  

 第四个 事务超时

 回滚规则

在默认设置下:事务只在出现运行异常(runtime exception)时回滚,而在出现受阻异常(checked exception)时不回滚   在控制狂的设置下,就会变化的。






容器启动事务:

1--insert一条数据
2--commit;
3--insert一条数据
4--insert

容器提交事务

1--不管发生了什么,1只有没错,1-insert永远插入
2--如果三或者四发生了运行异常并且没有捕捉,则三四都回滚
3--如果三或者四发生了运行异常且捕捉了,则若发生异常后面的全部回滚,发生异常前面的不回滚(注意:捕捉了!!)

如果第三条语句出现问题,并且异常被捕捉到了
则1--insert一条数据提交成功 ,commit 之后
如果没有捕获到或者说没有做catch的操作,
//只是在方法签名上做了throws动作,那么插入失败。
则3--insert


这是我在ibatis情况下测试的,自己借助ibatis手动控制事务,

如果事务交给了spring容器管理,
会不会在 3-insert 处发生异常进行全部回滚。
1,经过测试不论发生什么情况:1都会执行,并插入到数据库中去。




sql异常 RuntimeException 捕获不到的,所以XX系统异常处理有问题
























读书人网 >软件架构设计

热点推荐