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 超时