石材做网站细节云南网上办事大厅官网
web/
2025/10/5 3:48:35/
文章来源:
石材做网站细节,云南网上办事大厅官网,链家网站谁做的,国内html5网站欣赏目录 含义 七种事务传播机制
1.REQUIRED#xff08;默认#xff09;
2.REQUIRES_NEW
3.SUPPORTS
4.NOT_SUPPORTED
5.MANDATORY
6.NEVER
7.NESTED 含义 Spring事务的传播机制是指在多个事务方法相互调用时#xff0c;如何处理这些事务的传播行为。对应七种事务传播行为…
目录 含义 七种事务传播机制
1.REQUIRED默认
2.REQUIRES_NEW
3.SUPPORTS
4.NOT_SUPPORTED
5.MANDATORY
6.NEVER
7.NESTED 含义 Spring事务的传播机制是指在多个事务方法相互调用时如何处理这些事务的传播行为。对应七种事务传播行为处理决策。 七种事务传播机制
如图 1.REQUIRED默认
如果当前存在事务主要是通过检查ThreadLocal中的事务信息来完成的则加入该事务如果没有事务则创建一个新的事务总是一个事务在执行。这是最常见的传播行为也是默认的传播行为。 通俗理解就是外部没事务我就开一个事务外部有事务我就融合进去既然融合进去了我一旦异常外部事务所有操作全部回滚。 Transactional//默认public void addUser(){insertUser();//插入数据init();//初始化用户的各项的信息log();//日志记录}Transactional//默认public void insertUser(){//数据库用户表插入一条新数据//。。。。。。。。。。}Transactionalpublic void init(){//初始化用户信息如用户的个人空间信息、用户的消息列表、工作空间等//。。。。。。。。。。}Transactional(propagation Propagation.REQUIRES_NEW)public void log(){//日志记录//。。。。。。。。。。}
这段代码有个添加新用户的方法开启了事务方法内会插入一条用户数据、初始化用户各项业务信息、记录日志调用的三个方法都开启了事务 insertUser()和 init()都是默认事务传播只要两者有一方异常整个addUser()全部都会回滚。 这意味着如果这个方法内部抛出了异常那么整个事务包括这个方法和之前的其他数据库操作都会回滚确保数据的一致性。
适用于增删改查 2.REQUIRES_NEW
无论当前是否存在事务都会创建一个新的事务。如果当前存在事务则将其挂起等待新的事务完成后再恢复。 说人话就是我不管你外部有没有事务我自己单独开一个事务我异常了我自己回滚不会影响到外部的事务。 Transactional//默认public void addUser(){insertUser();//插入数据init();//初始化用户的各项的信息log();//日志记录}Transactional//默认public void insertUser(){//数据库用户表插入一条新数据//。。。。。。。。。。}Transactionalpublic void init(){//初始化用户信息如用户的个人空间信息、用户的消息列表、工作空间等//。。。。。。。。。。}Transactional(propagation Propagation.REQUIRES_NEW)public void log(){//日志记录//。。。。。。。。。。}
同样是这段代码有个log()记录日志方法事务传播机制设置为REQUIRES_NEW这意味着在addUser()中 insertUser()、init()是融合到了addUser()的外层事务中但是log()自己单独开启了一个事务log()内部异常了就会回滚log()方法自己对于addUser()没有影响。 与REQUIRED不同REQUIRES_NEW会确保每次调用updateUser方法时都创建一个新的事务。在这个新的事务里面出现了异常则会回滚但并不会影响到其他事务这种传播行为常用于需要隔离性较高的场景例如支付、转账等操作。
适用于内部事务和外部事务不存在业务关联情况如日志。 3.SUPPORTS
如果当前存在事务则加入该事务如果没有事务则以非事务方式执行。适用于不需要强制要求事务的场景。 说人话就是外部没事务我也不会主动开事务直接执行外部有事务我就融合进去。 适用于查询 4.NOT_SUPPORTED
以非事务方式执行操作如果当前存在事务则将其挂起直到操作完成后再恢复事务。 说人话就是外部有没有事务我不管我就要无事务执行。 这个不常用 5.MANDATORY
要求当前存在事务如果没有事务则抛出异常。 说人话就是外部没事务我不乐意直接抛异常外部有事务我融合进去总之外部你就得给我提供一个事务。 这个不常用 6.NEVER
要求不存在事务如果当前存在事务则抛出异常。 说人话就是外部没有事务我直接无事务执行外部有事务我就捣乱直接抛异常。总之就是不能有事务。 这个不常用 7.NESTED
如果外部不存在事务则开启新事务如果当前存在事务则在嵌套事务内执行。嵌套事务是独立于外部事务的子事务它具有自己的保存点savepoint可以回滚到该保存点。 说人话就是外部存在事务我就融合进去但是我出问题抛异常了我自己的问题自己回滚不影响外层但是外层抛异常了我就得回滚外层影响内层内层不影响外层。那外部没事务我就新开一个事务同样遵循外层影响内层内层不影响外层。 这个不常用
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87142.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!