随笔分类 -  事务控制

摘要:前言 对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到spring事务。 确实,spring事务用起来贼爽,就用一个简单的注 阅读全文
posted @ 2022-12-23 22:44 super超人 阅读(246) 评论(0) 推荐(0)
摘要:Spring事务传播行为有7种: spring的7种传播行为:1.required:(默认传播行为),如果当前有事务,其他就用当前事务,不会新增事务。例如:方法A调用方法B,它们用同一个事务。(如果B没有事务,它们会用同一个事务。)(只要有一个回滚,整体就会回滚) 2.requires_new:如果 阅读全文
posted @ 2021-08-21 18:18 super超人 阅读(4851) 评论(0) 推荐(1)
摘要:异常:Transaction rolled back because it has been marked as rollback-only 原因:已经标记为rollback-only,但是后面的程序执行后又commit事务,抛出此异常。虽然都回滚,不影响正常业务。但是日志打印这种异常让人很难受。 阅读全文
posted @ 2021-08-21 16:42 super超人 阅读(64704) 评论(0) 推荐(1)
摘要:applicationContext.xml: 当时在一个update开头的方法中有多个更新数据库的操作,为了测试事务回滚的有效性,在代码中放置了一段空指针异常代码,发现事务并没有回滚。 注释掉<!--此处配置使得事务控制 回滚失效 暂时注释掉-->下的内容,事务正常回滚。当时记得重复验证了要几次, 阅读全文
posted @ 2019-07-31 12:01 super超人 阅读(846) 评论(0) 推荐(0)
摘要:spring无法对多线程进行事务控制,原因是: 多线程底层连接数据库的时候,是使用的线程变量(TheadLocal),所以,开多少线程理论上就会建立多少个连接,每个线程有自己的连接,事务肯定不是同一个了。 解决办法:我强制手动把每个线程的事务状态放到一个同步集合里面。然后如果有单个异常,循环回滚每个 阅读全文
posted @ 2019-07-12 17:46 super超人 阅读(25890) 评论(3) 推荐(3)
摘要:一、事务的基本要素(ACID)(特性) 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 2 阅读全文
posted @ 2019-04-22 11:56 super超人 阅读(1822) 评论(0) 推荐(0)
摘要:待补充 阅读全文
posted @ 2019-04-16 18:28 super超人 阅读(332) 评论(0) 推荐(0)
摘要:在aop配置事务控制或注解式控制事务中,try...catch...会使事务失效,可在catch中抛出运行时异常throw new RuntimeException(e)或者手动回滚TransactionAspectSupport.currentTransactionStatus().setRoll 阅读全文
posted @ 2018-11-02 18:53 super超人 阅读(8647) 评论(0) 推荐(0)
摘要:事务控制回滚: service中控制事务回滚是否捕获异常需要区分处理。 没有try...catch捕获异常: 1.需要配置事务(AOP配置式或注解式),在需要回滚的地方使用手动回滚或者主动抛出异常。(抛出的异常需要与spring配置的异常保持一致或者在其范围内,spring才能捕捉到异常并回滚)。 阅读全文
posted @ 2018-10-17 16:30 super超人 阅读(315) 评论(0) 推荐(0)