Spring声明式事务

 1 <!--*****************************************************************************************-->
 2         spring声明式事务(注解)
 3         1)在xml配置文件中
 4             启用tx命名空间
 5             
 6                 <!--配置事务管理器 ,
 7                 这是jdbc的事务管理器  , datasource是一个实现jdbc的源
 8                 对于hibernate来说是一样的
 9                 -->
10             <bean id =" transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" >
11             <constructor-arg ref = "datasource"></constructor-arg>
12             </bean>
13             
14             <!-- 启用事务注解  transaction-manager的值需和上面的id对应-->
15             <tx:annotation-driven transaction-manager="transactionManager" />
16         
17             在相应的业务逻辑上添加注解@Transactional
18             
19             使用propaation设置事务传播行为
20             如:
21                 @Transactional(propaation = Propaation.REQUIRED) //这也是spring事务传播的默认行为
22                 
23             事务的传播行为:(当一个事务调用另一个事务的时候)
24                 如:A.show()是一个事务
25                     B.run( class A)
26                     {
27                         A.show();//这个时候就会存在事务的传播行为,因为类A里面的show本身也是一个事务
28                     }
29                     
30             REQUIRED:默认传播行为。俗称有就可以,无需重新开启一个事务,只要事务存在就可以了。
31                       但是必须整体事务完成,如发生异常,则回滚已经完成的事务部分。
32                       
33             
34             REQUIRES_NEW:创建一个新的事务。本身被挂起
35                          整个过程中出现异常,已经完成的事务生效。
36             
37             事务隔离级别:
38                 isolation指定事务的隔离级别
39                 最常用的是读已提交Isonation.READ.COMMITTED;
40 41                 @Transactional(propaation = Propaation.REQUIRED ,isolation = Isonation.READ.COMMITTED )
42                 
43             异常回滚:
44                 默认情况下spring的声明式事务对所有的运行时异常回滚。
45                 也可以设置对应的属性
46                 rollbackFor:    异常回滚
47                 noRollbackFor:异常不回滚
48                     如:
49                         @Transactional(propaation = Propaation.REQUIRED ,isolation = Isonation.READ.COMMITTED , noRollbackFor = {CLASSA.class} )
50                         对CLASSA不回滚
51                 
52             指定事务是否为只读(只读事务):
53                 readonly = true/false
54                 如:
55                     @Transactional(propaation = Propaation.REQUIRED ,isolation = Isonation.READ.COMMITTED , noRollbackFor = {CLASSA.class}  ,readonly = true )
56         
57             超时

 

posted @ 2015-09-10 16:27  仰望天空+脚踏实地  阅读(189)  评论(0编辑  收藏  举报