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