我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java异常和@Transactional(rollbackFor=Exception.class)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java异常和@Transactional(rollbackFor=Exception.class)

在介绍之前我们先来了解几个Java异常的基本概念。如果你不懂异常,那看完我这篇文章应该很快对异常有了一个大概的了解。

异常:是指阻止当前方法或作用域继续执行的问题。

Throwable类:被用来表示任何可以作为异常被抛出的类,是所有错误或异常的超类。

Throwable 可分为两种类型:

      Error:用来表示系统错误,脱离程序员控制,异常是可以通过修改程序处理的,而错误是不可以通过修改程序处理的。

      Exception:是异常可以被抛出的基本类型,在 Java 类库、用户方法以及运行时故障中都可能抛出 Exception 型异常。

运行时异常(RuntimeException):也称非检查性异常,通常是程序逻辑存在问题引发的异常,程序员本可以避免的异常,编辑器不会检查报错,即使不用try-catch捕获处理,也没有用throws声明抛出,也会编译通过。但是在运行时可能会报错。(如NullPointerException、IndexOutOfBoundsException)

非运行时异常:编译时异常,也称检查性异常,是必须进行处理的异常,如果不处理,程序就不能编译通过,必须使用try-catch捕获处理。(如IOException、SQLException)

接下来说说@Transactional(rollbackFor=Exception.class)

开发过程中,代码检查时经常看到这种提示:

方法【infoPublish】需要在Transactional注解指定rollbackFor或者在方法中显式的rollback。 
Inspection info: 事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。 

 点开提示发现其给出三种用法建议:

方法【infoPublish】需要在Transactional注解指定rollbackFor或者在方法中显式的rollback。  Inspection info: 事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。             Positive example 1:    @Service    @Transactional(rollbackFor = Exception.class)    public class UserServiceImpl implements UserService {        @Override        public void save(User user) {            //some code            //db operation        }    }Positive example 2:    @Service    public class UserServiceImpl implements UserService {        @Override        @Transactional(rollbackFor = Exception.class)        public void save(User user) {            //some code            //db operation        }    }Positive example 3:    @Service    public class UserServiceImpl implements UserService {        @Autowired        private DataSourceTransactionManager transactionManager;        @Override        @Transactional        public void save(User user) {            DefaultTransactionDefinition def = new DefaultTransactionDefinition();            // explicitly setting the transaction name is something that can only be done programmatically            def.setName("SomeTxName");            def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);            TransactionStatus status = transactionManager.getTransaction(def);            try {                // execute your business logic here                //db operation            } catch (Exception ex) {                transactionManager.rollback(status);                throw ex;            }        }    }                

解决方法一:在@Transactional注解后面加上(rollbackFor = Exception.class)

解决方法二:@Transactional注解上不加rollbackFor这个属性,在try-catch中catch里写上回滚方法。

那么,@Transactional注解需不需要加rollbackFor=Exception.class?为什么?

首先,rollbackFor的作用是 可以指定能够触发事务回滚的异常类型。

如果不配置rollbackFor属性,那么该方法只有在遇到运行时异常(RuntimeException)类型的时候才会回滚。

如果某方法加了@Transactional(rollbackFor=Exception.class)这个注解,那么该方法抛出运行时和非运行时异常(任何Exception异常),都会回滚。

如果某方法加了@Transactional(notRollbackFor=RunTimeException.class)这个注解,那么该方法在运行时异常不会回滚。

Transactional还是有很多其他参数,如readOnly、timeout、propagation等等,可以自行再深度学习一下

来源地址:https://blog.csdn.net/xutong_123/article/details/128246994

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java异常和@Transactional(rollbackFor=Exception.class)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java中抛出异常和捕获异常有什么区别

这篇文章主要介绍Java中抛出异常和捕获异常有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!抛出异常:创建异常对象,封装异常信息然后通过throw将异常对象传递给调用者。不对异常进行处理只对异常进行抛出是非常
2023-06-15

java编译时异常和运行时异常有什么区别

Java中的异常分为编译时异常(Checked Exception)和运行时异常(Unchecked Exception)。编译时异常:编译时异常是在编译阶段就出现的异常,必须在代码中显式处理或声明抛出。编译时异常包括IOException
2023-08-28

Java异常怎么声明和抛出

小编给大家分享一下Java异常怎么声明和抛出,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!常用的java框架有哪些1.SpringMVC,Spring Web M
2023-06-14

Java注解和异常实例分析

今天小编给大家分享一下Java注解和异常实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。注解作用注解是JDK1.5版本
2023-07-02

Java中FileNotFoundException异常的常见原因和解决方法

在Java编程中,FileNotFoundException是一个常见的异常,它表示在尝试访问文件时无法找到指定的文件。本文将介绍FileNotFoundException异常的常见原因,并提供相应的解决方法和示例代码。 文件路径错误:F
Java中FileNotFoundException异常的常见原因和解决方法
2023-12-23

Java内部类和异常类的示例分析

这篇文章将为大家详细讲解有关Java内部类和异常类的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1 内部类Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌
2023-06-14

Java中的异常和处理知识点总结

这篇文章主要介绍“Java中的异常和处理知识点总结”,在日常操作中,相信很多人在Java中的异常和处理知识点总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的异常和处理知识点总结”的疑惑有所帮助!
2023-06-17

Java异常简介和架构_动力节点Java学院整理

Java异常简介  Java异常是Java提供的一种识别及响应错误的一致性机制。  Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, wh
2023-05-31

Java异常体系非正常停止和分类问题怎么解决

本篇内容主要讲解“Java异常体系非正常停止和分类问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java异常体系非正常停止和分类问题怎么解决”吧!一、异常概念异常,就是不正常的意思。
2023-07-02

Java异常区分和处理的一些经验分享

异常处理的一些经验总结这篇文章主要是对Java异常选择和使用中的一些误区的总结和归纳,希望各位读者能够熟练掌握异常处理的一些注意点和原则。只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验,提高产品的价值。废话少说
2023-05-30

java异常处理机制原理和应用的示例分析

这篇文章主要介绍了java异常处理机制原理和应用的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、Java异常简介大家对trycatch可能并不陌生,也都使用的非常
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录