返回顶部
首页 > 资讯 > 精选 >controller的异常处理及service层的事务控制方法
  • 444
分享到

controller的异常处理及service层的事务控制方法

2023-06-29 07:06:11 444人浏览 安东尼
摘要

这篇文章主要介绍了controller的异常处理及service层的事务控制方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇controller的异常处理及service层的事务控制方法文章都会有所收获,下面

这篇文章主要介绍了controller的异常处理及service层的事务控制方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇controller的异常处理及service层的事务控制方法文章都会有所收获,下面我们一起来看看吧。

controller异常处理及service层的事务控制

最近写代码涉及到一些事务,上午终于把代码给理顺了,之前不太清楚在哪里做异常处理,导致代码遍地try-catch,相当难看。

还是基于controller-service-dao三层来写代码,从入口开始,controller层的方法对应的是某个url,面向的是应用人员,应该返回他们能读懂的信息,所以controller必须做异常处理,一般来说会有统一的异常处理方法;

service层面向的是controller,service层中的某些方法,必须保证其事务,所以在service层进行事务控制是相当必要的,对于多条sql进行事务控制,如果某个sql执行失败,那么应当对已经执行的sql语句进行回滚;

dao层更多是单一的sql语句,没有必要进行事务控制,因为事务开销并不便宜(官方原话);

基于以上三点,回头再思考关于异常的处理,一般情况应该把异常网上抛,一直抛到最终处理的那一层,所以对于dao层和service其实是没有必要进行try-catch的,直接往上抛异常就可以。

与之对应的,是spring的事务配置,默认情况下,spring只对运行时异常进行回滚,如果在dao层处理了异常,那么需要进行额外的配置,spring才会对异常进行回滚,常用的配置是@Transactional(rollbackFor=Exception.class)

顺便提一个java知识点,关于try-catch-finally中,finally的作用,finally设计之初就是为了关闭资源,如果在finally中使用return语句,会覆盖try或者catch的返回值,最常见的就是覆盖异常,即便catch往上抛了异常,也会被覆盖,返回finally中return语句的返回值。 

controller层Exception异常事务回滚失效问题

Spring的@Transactional源码中写道

By default, a transaction will be rolling back on {@link RuntimeException}and {@link Error} but not on checked exceptions (business exceptions).

默认情况下,如果在事务中抛出了未检查异常(继承自 RuntimeException 的异常)或者 Error,则 Spring 将回滚事务;除此之外,Spring 不会回滚事务。

controller的异常处理及service层的事务控制方法

测试

默认spring事务只在发生未被捕获的 RuntimeException 时才回滚。

// 测试回滚成功案例,基于IllegalArgumentException(RuntimeException)实现回滚@GetMapping("/testSuccess")@Transactional// 如果不加,就不会回滚public R testSuccess(@RequestParam("type") Integer type){    eduTeacherService.removeById("2");    if (type == 1){        throw new IllegalArgumentException("测试回滚成功案例!");    }    eduTeacherService.removeById("3");    return  R.ok();}

controller的异常处理及service层的事务控制方法

测试②

Exception异常,事务回滚失败;

// 测试回滚失败案例,基于Exception实现回滚;@GetMapping("/testFail")@Transactionalpublic R testFail(@RequestParam("type") Integer type)  {    try {        eduTeacherService.removeById("2");        if (type == 1){            throw new Exception("测试回滚失败案例!");        }        eduTeacherService.removeById("3");    } catch (Exception e) {        e.printStackTrace();    }    return  R.ok();}

controller的异常处理及service层的事务控制方法

测试③

用rollbackFor解决Exception不进行事务回滚

rollbackFor = Exception.class + throws Exception
@GetMapping("/testFailRollbackFor")// 配置rollbackFor@Transactional(propagation= Propagation.REQUIRED,rollbackFor = Exception.class)public R testFailRollbackFor(@RequestParam("type") Integer type) throws Exception {        eduTeacherService.removeById("2");        if (type == 1){            throw new Exception("测试回滚失败rollbackFor成功案例!");        }        eduTeacherService.removeById("3");    return  R.ok();}

controller的异常处理及service层的事务控制方法

测试④

手动回滚解决Exception不进行事务回滚

catch:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@GetMapping("/testSuccessByHand")@Transactionalpublic R testSuccessByHand(@RequestParam("type") Integer type)  {    try {        eduTeacherService.removeById("2");        if (type == 1){            throw new Exception("测试回滚失败案例!");        }        eduTeacherService.removeById("3");    } catch (Exception e) {        e.printStackTrace();        //手动回滚,如果sql2()抛了异常,sql1()会回滚,不影响事物正常执行        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();    }    return  R.ok();}

controller的异常处理及service层的事务控制方法

关于“controller的异常处理及service层的事务控制方法”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“controller的异常处理及service层的事务控制方法”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: controller的异常处理及service层的事务控制方法

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

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

猜你喜欢
  • controller的异常处理及service层的事务控制方法
    这篇文章主要介绍了controller的异常处理及service层的事务控制方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇controller的异常处理及service层的事务控制方法文章都会有所收获,下面...
    99+
    2023-06-29
  • 关于controller的异常处理及service层的事务控制方式
    目录controller异常处理及service层的事务控制controller层Exception异常事务回滚失效问题Spring的@Transactional源码中写道测试①测试...
    99+
    2024-04-02
  • 结合Service层讲解DAO层的异常处理操作
    domain:只是定义一个javabean。 dao:对于数据库的操作,都放到dao层,也就是dao里面通常是对数据库的增、删、改、查等操作。 service:完成相应的业务逻辑处理...
    99+
    2024-04-02
  • Service层讲解DAO层中异常处理操作的示例分析
    这篇文章将为大家详细讲解有关Service层讲解DAO层中异常处理操作的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。domain:只是定义一个javabean。dao:对于数据库的操作,都放到d...
    99+
    2023-06-15
  • 常见的Python异常及处理方法总结
    目录一、错误与异常1.什么是错误2.什么是异常3.回溯信息二、常见异常常见异常类三.异常处理1.异常处理2.简单的异常处理格式3.执行顺序4.except分支可以有多个5.执行顺序6...
    99+
    2024-04-02
  • ceph心跳机制异常的处理方法
    ceph心跳机制异常的处理方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。部署使用ceph集群的时候遇到一个情况,在大规模集群的时候,有节点网络或者osd异常时,mon迟...
    99+
    2023-06-05
  • 怎么在springBoot中利用service实现层事务控制的操作
    怎么在springBoot中利用service实现层事务控制的操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。springBoot使用事物比较简单,在Appl...
    99+
    2023-06-06
  • PHP中的异常及其处理机制
    目录什么是异常? 总结 上回文章中我们讲到了错误是编译和语法运行时会出现的,它们与逻辑无关,是程序员在码代码时不应该出现的,也就是说,这些错误应该是尽量避免带到线上环境的,他们不能通...
    99+
    2024-04-02
  • springboot多个service互相调用的事务处理方法
    本文小编为大家详细介绍“springboot多个service互相调用的事务处理方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot多个service互相调用的事务处理方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-06-29
  • Python中异常处理的常见问题及解决方法
    Python中异常处理的常见问题及解决方法引言:在编写程序时,很难避免出现各种各样的错误和异常。异常处理是一种机制,可以在程序运行时捕获和处理这些异常,从而保证程序的稳定性和可靠性。在Python中,异常处理是一项非常重要的技能,本文将介绍...
    99+
    2023-10-22
    异常处理 (Exception Handling) 解决方法 (Solutions) 常见问题 (Common Prob
  • 自定义注解和springAOP捕获Service层异常并处理自定义异常的示例分析
    这篇文章主要为大家展示了“自定义注解和springAOP捕获Service层异常并处理自定义异常的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“自定义注解和springAOP捕获Serv...
    99+
    2023-06-15
  • spring在service层的方法报错事务不会回滚的解决
    目录spring在service层方法报错事务不会回滚解决方法service手动回滚问题spring在service层方法报错事务不会回滚 @Transactional(rollba...
    99+
    2024-04-02
  • Spring的事务控制实现方法
    Spring的事务控制实现,供大家参考,具体内容如下 提示:这里使用的是xml的方式配置事务的 前言 例:当银行转账的时候,如果转账和收款的一方出现问题,那么这次的转账则不成功,此处...
    99+
    2024-04-02
  • MYSQL事务处理两种常见的方法
    下文给大家带来关于MYSQL事务处理两种常见的方法,感兴趣的话就一起来看看这篇文章吧,相信看完MYSQL事务处理两种常见的方法对大家多少有点帮助吧。        &...
    99+
    2024-04-02
  • ORACLE服务器异常断电及控制文件故障的处理步骤是什么
    这篇文章给大家介绍ORACLE服务器异常断电及控制文件故障的处理步骤是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 这里只是简单的记录操作步骤,以做...
    99+
    2024-04-02
  • PHP异常处理:理解异常对象的属性和方法
    php 异常对象提供重要异常信息。其属性包括:错误消息(getmessage())、错误代码(getcode())、异常文件路径(getfile())、异常文件行号(getline())...
    99+
    2024-05-14
    异常处理 php异常
  • SpringMVC异常处理机制与自定义异常处理方式的示例分析
    这篇文章主要介绍SpringMVC异常处理机制与自定义异常处理方式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!提到异常处理,就不得不提HandlerExceptionResolvers,我们的Dispat...
    99+
    2023-06-25
  • THINKPHP调试模式及异常处理的方法是什么
    这篇文章主要讲解了“THINKPHP调试模式及异常处理的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“THINKPHP调试模式及异常处理的方法是什么”吧!调试模式开启调试模式很简单...
    99+
    2023-06-26
  • Java异常处理的的方法是什么
    本篇内容主要讲解“Java异常处理的的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java异常处理的的方法是什么”吧!1) 为可恢复的错误使用检查型异常,为编程错误使用非检查型错误。...
    99+
    2023-06-16
  • php常见的错误与异常处理方法
    本篇内容介绍了“php常见的错误与异常处理方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php与其他计算机编程语言在遇到错误就抛出异常不...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作