返回顶部
首页 > 资讯 > 后端开发 > Python >Spring中事务几个常见的问题解决
  • 711
分享到

Spring中事务几个常见的问题解决

Spring事务常见问题Spring事务 2022-11-13 14:11:52 711人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言spring如何处理事务1、编程式事务,可以使用TransactionTemplate2、声明式事务Spring事务传播机制Spring事务隔离级别前言 首先,事务这个概念是

前言

首先,事务这个概念是数据库层面的,Spring只是基于数据库中的事务进行扩展,以及提供了一些能让程序员更新方便操作事务的方式

Spring如何处理事务

Spring中支持编程式事务和声明式事务管理两种方式

1、编程式事务,可以使用TransactionTemplate

public class B {
    @Autowired
    private TransactionTemplate template;
    
    public void sout(){
        TransactionCallback<Integer> transactionCallback = new TransactionCallback<Integer>() {
            @Override
            public Integer doInTransaction(TransactionStatus transactionStatus) {
                //jdbcTemplate.update
                //jdbcTemplate.update
                if(执行失败){
                    //回滚事务
                    transactionStatus.setRollbackOnly();
                    return -1;
                }
                return 1;
            }
        };

        Integer result =  template.execute(transactionCallback);
    }

当加了@Transactional注解后,Spring会基于这个类生成一个代理对象,会将这个代理对象作为bean,当在使用这个代理对象的方法时,如果这个方法上存在@Transactional注解,那么代理逻辑会先把事务的自动提交设置为false,然后再去执行原本的业务逻辑方法,如果执行业务逻辑方法没有出现异常,那么代理逻辑中就会将事务提交,如果执行业务逻辑方法出现了异常,那么会将事务进行回滚。

好处:代码级别的事务控制,可以自己控制事务的逻辑,比较灵活
缺点:太麻烦,需要自己实现所有的事务逻辑

2、声明式事务

是Spring在aop基础上提供的事务实现机制。

public class B {
    @Autowired
    private TransactionTemplate template;

    @Transactional
    public void sout(){
  System.out.println("=================A=====================");
    }
}

优点:不需要在业务代码中添加事务管理的代码,只需要在配置文件中做相关的事务规则声明规则就可以了。
缺点:只能只能针对方法级别,无法控制代码级别。

Spring事务传播机制

Propagation:多个事务方法相互调用时,事务是如何在这些方法键传播

方法A是一个事务方法。方法A在执行的过程中调用了方法B,那么方法B有无事务以及方法B对事物的要求不同都会对方法A的事务具体执行造成影响,同时方法A的事务对方法B的事务执行也有影响。这种影响具体是什么就由两个方法所定义的事务传播类型所决定

a调用b,以下描述,当前均只a,自己均指b

  • REQUIRED(Spring默认的事务传播类型):如果当前没有事务,则自己新建一个事务,如果当前存在事务,则加入这个事务。
  • SUPPORTS:当前存在事务,则加入当前事务,如果当前没有事务,就以非事务方法执行
  • MANDATORY:当前存在事务,则加入当前事务,如果当前没有事务,则抛出异常
  • REQUIRES_NEW:创建一个新事务,如果存在当前事务,则挂起该事务(互不干扰)
  • NOT_SUPPORTED:以非事务方法执行,如果当前存在事务,则挂起当前事务。
  • NEVER:不使用事务,如果当前存在事务,则抛出异常
  • NESTED:如果当前存在事务,则嵌套事务中执行,否则REQUIRED操作一样(开启一个事务)

和REQUIRES_NEW的区别:
REQUIRES_NEW是新建一个事务,并且新开启的事务与原事务无关,而NESTED则是当前存在事务时(我们把当前事务成为父事务)会开启一个嵌套事务(称之为一个子事务)。在NESTED情况下父事务回滚时,子事务也会回滚,而在REQUIRES_NEW情况下,原有事务回滚,不会影响新开启的子事务。

和REQUIRED的区别:
REQUIRED情况下,调用方存在事务时,则被调用和调用方法使用同一事务,那么被调用方出现异常时,由于共用一个事务,所以无论调用方法是否catch异常,事务都会回滚(父子事务一起回滚),而在NESTED情况下,被调用方发生异常时,调用发可以catch其异常,这样只有子事务回滚,父事务不受影响(父事务是否需要回滚可以自行决定)

Spring事务隔离级别

  • ISOLATION:Spring的事务隔离级别
  • DEFAULT:使用数据库默认的事务隔离级别
  • READ_UNCOMMITTED:读未提交,允许事务在执行过程中,读取其他事务未提交的数据
  • READ_COMMITTED:读已提交,允许事务在执行过程中,读取其他事务已提交的数据
  • REPEATABLE_READ:可重复读,在同一个事务内,任意时刻的查询结果是一致的
  • SERIALIZABLE:所有事务依次执行

数据库配置的隔离级别是read commited,而spring配置的隔离级别是repeatable read,这个时候隔离级别以哪个为准?
以Spring为准(spring配置的会覆盖数据库的隔离级别),如果Spring配置的隔离级别数据库不支持,效果取决于数据库

到此这篇关于Spring中事务几个常见的问题解决的文章就介绍到这了,更多相关Spring事务 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Spring中事务几个常见的问题解决

本文链接: https://lsjlt.com/news/171549.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring中事务几个常见的问题解决
    目录前言Spring如何处理事务1、编程式事务,可以使用TransactionTemplate2、声明式事务Spring事务传播机制Spring事务隔离级别前言 首先,事务这个概念是...
    99+
    2022-11-13
    Spring事务常见问题 Spring事务
  • Redis常见的几个问题及解决方法
    本篇内容主要讲解“Redis常见的几个问题及解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis常见的几个问题及解决方法”吧! 1、如何保证Redis高可用和高并发Redi...
    99+
    2023-06-16
  • MySQL事务的常见问题及解决方法
    MySQL事务的常见问题及解决方法 在数据库操作中,事务是一个非常重要的概念,可以保证一组SQL语句要么全部执行成功,要么全部失败,并且在并发操作中保证数据的一致性。然而,MySQL中...
    99+
    2024-03-01
    mysql 事务 解决 sql语句 数据丢失
  • Python工作中出现的几个常见问题
    这篇文章将为大家详细讲解有关Python工作中出现的几个常见问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题...
    99+
    2023-06-14
  • MySQL中事务处理的常见问题和解决方案
    MySQL中事务处理的常见问题和解决方案在数据库操作中,事务处理是非常重要的,它可以确保数据库操作的一致性和完整性。然而,在MySQL中进行事务处理时,常常会遇到一些问题。本文将介绍常见的MySQL事务处理问题,并提供相应的解决方案。问题一...
    99+
    2023-10-22
    解决方案 问题 事务处理
  • 详谈spring boot中几种常见的依赖注入问题
    目录@Autowired依赖注入问题–逻辑使用先于@Autowired注解处理测试用例BeanFactory.getBean问题–getBean调用先于BeanDefinition信...
    99+
    2024-04-02
  • 关于香港服务器IP的几个常见问题
    关于香港服务器IP的常见问题有:1、香港服务器IP是否需要额外收费;2、香港服务器IP能否自己选择;3、香港服务器IP被封了如何进行处理;4、香港服务器IP属于IPv4还是IPv6地址;5、如何判断香港服务器IP的真假;6、怎么查看香港服务...
    99+
    2024-04-02
  • Node.js 事件循环中的常见问题与解决方法
    ...
    99+
    2024-04-02
  • mysql事务中常见问题是什么
    这篇文章给大家分享的是有关mysql事务中常见问题是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、更新丢失原因:当多个事务选择同一行操作,并且都是基于最初选定的值,由于每个事务都不知道其他事务的存在,就会...
    99+
    2023-06-15
  • PHP ZipArchive 扩展的常见问题解答:解决常见疑问
    PHP ZipArchive 扩展为处理 ZIP 压缩文件提供了强大且易于使用的功能。然而,在使用该扩展时可能会遇到一些常见问题。本文旨在解决这些常见问题并提供相应的解决方案。 问题 1:创建 ZIP 文件时无法向其中添加文件 解决方案...
    99+
    2024-03-08
    ZipArchive PHP 压缩 解压 常见问题
  • 如何进行Spring声明性事务常见问题分析
    小编今天带大家了解如何进行Spring声明性事务常见问题分析,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“如何进行Spring声明性...
    99+
    2023-06-17
  • 服务器常见的异常问题怎么解决
    服务器常见的异常问题解决方法:1、服务器系统蓝屏、频繁死机、重启、反映速度迟钝问题,检查是否感染了病毒,是则及时进行杀毒;2、服务器远程桌面连接超出最大连接数问题,重启服务器或用mstsc/console指令进行强行登陆;3、无法删除文件问...
    99+
    2024-04-02
  • 服务器常见的异常问题如何解决
    服务器常见的异常问题包括网络连接问题、硬件故障、软件错误等。解决这些问题的方法取决于具体的情况,下面是一些常见的解决方法: 网络...
    99+
    2024-04-24
    服务器
  • Docker Desktop常见的几种启动失败问题解决方法
    目录报错1,Error:Failed to restart报错2,Error invoking remote method 'desktop-go-backend':...
    99+
    2024-04-02
  • ASP 类常见问题:解决开发中的棘手问题
    1. 性能低下 问题:页面加载缓慢或响应不及时。 解决方法: 优化数据库查询,使用索引和适当的连接。 使用缓存机制,如 ASP.NET Output Caching。 优化代码,避免不必要的循环和重新计算。 使用性能分析工具,如 dot...
    99+
    2024-04-02
  • 总结几种MySQL中常见的排名问题
    前言: 在某些应用场景中,我们经常会遇到一些排名的问题,比如按成绩或年龄排名。排名也有多种排名方式,如直接排名、分组排名,排名有间隔或排名无间隔等等,这篇文章将总结几种MySQL中常见的排名问题。 创建测试表 ...
    99+
    2022-05-16
    MySQL 统计排名 MySQL 排名
  • Go语言在Spring中的索引并发:如何解决常见问题?
    在现代计算机系统中,数据库是一个必不可少的组件。对于大型应用程序,使用关系型数据库来存储和管理数据是非常常见的。Spring框架是一个非常流行的Java企业应用程序框架,它提供了各种各样的功能和服务,包括数据存储和管理。 在Spring中...
    99+
    2023-10-06
    索引 并发 spring
  • WCF常见异常问题的解决方法
    这篇文章主要讲解了“WCF常见异常问题的解决方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF常见异常问题的解决方法”吧!WCF还是比较常用的,于是我研究了一下WCF,在这里拿出来和大...
    99+
    2023-06-17
  • 事件冒泡引发的常见问题与解决方案
    事件冒泡(event bubbling)是指在DOM中,当一个元素上的事件被触发时,它会向上冒泡到该元素的父级元素,再向上冒泡到更高级别的父级元素,直至冒泡到文档的根节点。虽然事件冒泡...
    99+
    2024-02-22
    事件冒泡:事件 问题:冲突 解决方案:停止 事件冒泡 事件捕获
  • 整理Golang常见问题:你能列举几个吗?
    Golang问题汇总:你知道几个? Golang(Go语言)作为一种新兴的编程语言,受到了广泛的关注和使用。然而,就像其他编程语言一样,Golang也有一些常见的问题和容易造成困扰的地...
    99+
    2024-02-27
    问题 golang 汇总 go语言 内存占用 垃圾回收器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作