导航

Spring框架中关于事务管理操作数据库异常回滚失败问题解决

最近在学习Spring5,学到事务管理这一块,按照教程一步一步操作,编写了一个转账操作的Service类,使用JdbcTemplate进行连接数据库,在数据库中用户表创建两个账户,转账方法对其中一个账户余额增加100元,对另一个减少100元,在Service类中有两个方法,一个减少钱,一个增加钱,对整个类添加@Transactional事务注解,并在两个方法之间故意设置一句int i = 10/0;的异常代码。运行测试,程序抛出ArithmeticException异常,加钱方法没有被执行,同时事务管理没有生效,lucy账户的余额减少了100,在遇到异常的情况下没有发生回滚操作


通过网上百度了一堆资料,发现原来是数据库引擎的问题,晕死。。。。

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

在数据库中创建表的时候,默认使用了MyISAM,将其改成InnoDB以后,继续测试,成功了!,在程序执行到异常的时候,事务操作生效,回滚了失败的转账操作,lucy账户余额没有减少。

posted on 2020-09-28 21:35  IT马保国  阅读(1093)  评论(0编辑  收藏  举报