Spring事务管理
来源:互联网 发布:珀莱雅淘宝店真假 编辑:程序博客网 时间:2024/06/03 17:53
1.使用场景:假设有两张表A和B,现在做关联插入操作,当插入到B表发生错误时,要求A表的插入操作回滚
2.实现方法
方法一:使用注解@Transactionnal
方法二:不使用注解,spring配置某个方法进行事务管理(通过aop配置)
3.注解方法实现:
(1)spring配置
//配置事务管理器,DataSourceTransactionManager中有提交和回滚等一些列方法,进行事务管理
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
//数据源,数据库配置 <property name="dataSource" ref="smartDataSource" /></bean>//使注解生效
<tx:annotation-driven transaction-manager="transactionManager"/>(2)在需要使用事务管理的方法上加上注解,该注解有很多参数,大家可以baidu一下看看
@Transactional(rollbackFor=YourException.class)
public void myMethod(){
try{
insert(A); //插入A表
//int a=1/0;//测试
insert(B);//插入B表
}catch(Exception e){
throw new YourException();
}
}
说明:YourException 必须继承自unchecked类异常,例如RuntimeException;方法必须是public的;所有操作都执行完毕后,若没有异常再进行插入操作,若有异常,进行回滚
4.不使用注解,直接在spring配置文件中通过aop配置
//必须的配置文件同上
//配置事务管理器,DataSourceTransactionManager中有提交和回滚等一些列方法,进行事务管理
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
//数据源,数据库配置 <property name="dataSource" ref="smartDataSource" /></bean>//配置某个方法使用事务管理,这个对应使用注解方式方法和一些参数配置
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="myMethod" isolation="DEFAULT" propagation="REQUIRED" rollback-for="YourException"/> </tx:attributes></tx:advice>
//aop配置,因为你的某个需要事务管理的方法,根据业务需要在某个类服务里面,所以aop配置某个服务类为切入点,大家可以再仔细baidu一下aop相关知识
<aop:config> <aop:pointcut id="myService" expression="execution(* *..service.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="myService"/></aop:config>5.总结 看事务有没有生效,可以进入DataSourceTransActionManager类中再doBegain、doCommit、doRollback等方法中打断点,看一下有没有执行
根据上面的配置应该够用了,但是有可能会碰到注解不生效的情况,这时候要么查一下不生效的原因(可能是父子上下文的原因),要么直接用aop配置,
但是配置比较麻烦。
阅读全文
1 0
- 事务管理之Spring事务管理
- Spring事务管理
- spring事务管理
- Spring事务管理
- Spring事务管理
- Spring事务管理
- Spring事务管理
- Spring事务管理
- Spring 事务管理
- Spring事务管理
- spring 事务管理
- spring 事务管理
- spring 事务管理
- spring事务管理
- Spring 事务管理
- Spring事务管理
- spring事务管理
- spring 事务管理
- tack笔记
- 在O(1)时间删除链表结点
- Spring Boot 整合 log4j2 实现日志管理
- Pahom on Water HDU
- ASM空间扩容
- Spring事务管理
- 后缀表达式的运算求值
- 浅谈HTTP中Get与Post的区别
- Unity中的数值问题
- android studio 无法在可视化页面预览布局文件或预览有偏移现象
- VS编译c工程
- 谈谈java中的WeakReference
- python想要保存QQ邮箱富途的附件
- linux命令快捷键