博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring transaction事务之roll back回滚
阅读量:6928 次
发布时间:2019-06-27

本文共 8222 字,大约阅读时间需要 27 分钟。

测试controler

@Controllerpublic class DemoController2 {	 	@Autowired    private DemoService demoService; 		/**	 * 	 * @param response	 * @param resquest	 */	@RequestMapping(value = "/demoController2/selectList.do")	public void selectList(HttpServletResponse response,HttpServletRequest resquest){		Customer customer=new Customer();		customer.setApplicationNO("D00021807040005");		customer.setId_card("11111");		System.out.println("更新数据开始");		demoService.update(customer);		System.out.println("更新数据结束:"+customer.getId_card());			}	 }

情况1

@Override	public void update(Customer customer) {		// TODO Auto-generated method stub			customerDao.update(customer);			int i=7/0;	}
 
结果:抛异常,事务由回滚
2018-07-16 10:42:27,628 [http-bio-8080-exec-5] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - ==> Preparing: update ap_customer SET id_card=? where applicationNO=? 2018-07-16 10:42:27,629 [http-bio-8080-exec-5] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - ==> Parameters: 11111(String), D00021807040005(String) 2018-07-16 10:42:27,632 [http-bio-8080-exec-5] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - <== Updates: 1 2018-07-16 10:42:27,632 [http-bio-8080-exec-5] DEBUG [org.mybatis.spring.SqlSessionUtils] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4198553e] 2018-07-16 10:42:27,632 [http-bio-8080-exec-5] DEBUG [org.mybatis.spring.SqlSessionUtils] - Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4198553e] 2018-07-16 10:42:27,632 [http-bio-8080-exec-5] DEBUG [org.mybatis.spring.SqlSessionUtils] - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4198553e] 2018-07-16 10:42:27,632 [http-bio-8080-exec-5] DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Initiating transaction rollback 2018-07-16 10:42:27,633 [http-bio-8080-exec-5] DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Rolling back JDBC transaction on Connection [jdbc:mysql://127.0.0.1:3306/test_zhou?characterEncoding=UTF-8, UserName=root@localhost, MySQL-AB JDBC Driver]

情况2

@Override	public void update(Customer customer) throws Exception{//受检异常(非运行异常)必须抛出		// TODO Auto-generated method stub			try{				customerDao.update(customer);		           int i = 4/0;//人为产生异常		       }catch(Exception e){		           throw new Exception ("人为产生异常");//抛出Exception异常		       }	}
结果:抛出异常,事务没有回滚
2018-07-16 10:59:53,616 [http-bio-8080-exec-6] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - ==>  Preparing: update ap_customer SET id_card=? where applicationNO=?   2018-07-16 10:59:53,616 [http-bio-8080-exec-6] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - ==> Parameters: 11111(String), D00021807040005(String)  2018-07-16 10:59:53,617 [http-bio-8080-exec-6] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - <==    Updates: 1  2018-07-16 10:59:53,617 [http-bio-8080-exec-6] DEBUG [org.mybatis.spring.SqlSessionUtils] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c87b6f2]  2018-07-16 10:59:53,617 [http-bio-8080-exec-6] DEBUG [org.mybatis.spring.SqlSessionUtils] - Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c87b6f2]  2018-07-16 10:59:53,618 [http-bio-8080-exec-6] DEBUG [org.mybatis.spring.SqlSessionUtils] - Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c87b6f2]  2018-07-16 10:59:53,618 [http-bio-8080-exec-6] DEBUG [org.mybatis.spring.SqlSessionUtils] - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c87b6f2]  2018-07-16 10:59:53,618 [http-bio-8080-exec-6] DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Initiating transaction commit

情况3

@Override	public void update(Customer customer) throws RuntimeException{//运行异常(非受检异常)可以不抛出		// TODO Auto-generated method stub			try{				customerDao.update(customer);		           int i = 4/0;//人为产生异常		       }catch(Exception e){		           throw new RuntimeException ("人为产生异常");//抛出Exception异常		       }	}
结果:异常抛出,事务回滚
2018-07-16 11:04:37,304 [http-bio-8080-exec-4] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - ==>  Preparing: update ap_customer SET id_card=? where applicationNO=?   2018-07-16 11:04:37,305 [http-bio-8080-exec-4] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - ==> Parameters: 11111(String), D00021807040005(String)  2018-07-16 11:04:37,306 [http-bio-8080-exec-4] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - <==    Updates: 1  2018-07-16 11:04:37,307 [http-bio-8080-exec-4] DEBUG [org.mybatis.spring.SqlSessionUtils] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d520a8d]  2018-07-16 11:04:37,307 [http-bio-8080-exec-4] DEBUG [org.mybatis.spring.SqlSessionUtils] - Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d520a8d]  2018-07-16 11:04:37,307 [http-bio-8080-exec-4] DEBUG [org.mybatis.spring.SqlSessionUtils] - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d520a8d]  2018-07-16 11:04:37,307 [http-bio-8080-exec-4] DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Initiating transaction rollback  2018-07-16 11:04:37,308 [http-bio-8080-exec-4] DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Rolling back JDBC transaction on Connection [jdbc:mysql://127.0.0.1:3306/test_zhou?characterEncoding=UTF-8, UserName=root@localhost, MySQL-AB JDBC Driver]

情况4

@Transactional(rollbackFor=Exception.class)	public void update(Customer customer) throws  Exception{//受检异常(非运行异常)必须抛出		// TODO Auto-generated method stub			try{				customerDao.update(customer);		           int i = 4/0;//人为产生异常		       }catch(Exception e){		           throw new Exception ("人为产生异常");//抛出Exception异常		       }	}
结果:抛出异常,事务回滚 2018-07-16 11:21:36,618 [http-bio-8080-exec-2] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - ==>  Preparing: update ap_customer SET id_card=? where applicationNO=?   2018-07-16 11:21:36,635 [http-bio-8080-exec-2] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - ==> Parameters: 11111(String), D00021807040005(String)  2018-07-16 11:21:36,636 [http-bio-8080-exec-2] DEBUG [com.xx.core.dao.pushBusiness.CustomerDao.update] - <==    Updates: 1  2018-07-16 11:21:36,636 [http-bio-8080-exec-2] DEBUG [org.mybatis.spring.SqlSessionUtils] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5ab43a31]  2018-07-16 11:21:36,637 [http-bio-8080-exec-2] DEBUG [org.mybatis.spring.SqlSessionUtils] - Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5ab43a31]  2018-07-16 11:21:36,637 [http-bio-8080-exec-2] DEBUG [org.mybatis.spring.SqlSessionUtils] - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5ab43a31]  2018-07-16 11:21:36,637 [http-bio-8080-exec-2] DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Initiating transaction rollback  2018-07-16 11:21:36,637 [http-bio-8080-exec-2] DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Rolling back JDBC transaction on Connection [jdbc:mysql://127.0.0.1:3306/test_zhou?characterEncoding=UTF-8, UserName=root@localhost, MySQL-AB JDBC Driver]  2018-07-16 11:21:36,647 [http-bio-8080-exec-2] DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Releasing JDBC Connection [jdbc:mysql://127.0.0.1:3306/test_zhou?characterEncoding=UTF-8, UserName=root@localhost, MySQL-AB JDBC Driver] after transaction  2018-07-16 11:21:36,647 [http-bio-8080-exec-2] DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] -

 

事务回滚情况:

1运行时异常(untimeException 或其子类例的实例

2unchecked exceptions异常

不回滚情况

1Checked exceptions异常(情况2)

对不回滚的处理方案:

1:手动指定回滚

2 :使用了Springrollback-for配置

参考

https://blog.csdn.net/lovejavaydj/article/details/7635848

转载于:https://www.cnblogs.com/feiZhou/p/9343989.html

你可能感兴趣的文章
Validate Binary Search Tree leetcode java
查看>>
【编程题目】在二元树中找出和为某一值的所有路径(树)
查看>>
脱裤子放屁,多此一举
查看>>
445port入侵具体解释
查看>>
Git学习笔记(二)
查看>>
美妙的 CSS3 动画!一组梦幻般的按钮效果
查看>>
微软历史最高市值是多少?
查看>>
Linux Shell脚本Ldd命令原理及使用方法
查看>>
[ucgui] 对话框8——Framewin小工具
查看>>
Ununtu 12.04 gedit安装插件Source Code Browser
查看>>
Docker学习总结之Docker与Vagrant之间的特点比较
查看>>
人类智商一般在多少左右?爱因斯坦的智商是多少?
查看>>
Sql语句-case when then else end
查看>>
main函数中argc理解
查看>>
ArrayList与List对象用法与区别
查看>>
C++ 排序函数 sort(),qsort()的使用方法
查看>>
Python 隔离沙箱 virtualenv
查看>>
C中结构体的存储分配
查看>>
windows forms 上一个类似于wpf snoop 的工具: Hawkeye
查看>>
vector relation
查看>>