• springboot 事务注解


    spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作。

    1、异常

    1.1、检查型异常

    检查型异常(编译器要求必须处置的异常):正确的程序在运行中,很容易出现的、情理可容的异常状况。可查异常虽然是异常状况,但在一定程度上它的发生是可以预计的,而且一旦发生这种异常状况,就必须采取某种方式进行处理。
    除了RuntimeException(运行时异常)及其子类以外,其他的Exception类及其子类都属于检查型异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过,编译器一般会给出错误提示。

    例如:一个读取文件的方法代码逻辑没有错误,但程序运行时可能会因为文件找不到而抛出FileNotFoundException,如果不处理这些异常,程序将来肯定会出错。所以编译器会提示你要去捕获并处理这种可能发生的异常,不处理就不能通过编译。

    1.2、非检查型异常

    非检查型异常(Unchecked)是指编译器不会检查这类异常,不检查的则开发者在代码的编辑编译阶段就不是必须处理,这类异常一般可以避免,因此无需处理(try …catch)。如果不处理这类异常,集成开发环境中的编译器也不会给出错误提示。非检查型异常包括:运行时异常(RuntimeException与其子类)和错误(Error)。

    例如:你的程序逻辑本身有问题,比如数组越界、访问null对象,这种错误你自己是可以避免的。编译器不会强制你检查这种异常。

    1.3、运行时异常

    运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

    当出现RuntimeException的时候,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。

    1.4、非运行时异常

    非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如IOException、SQLException等以及用户自定义的Exception异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。

    参考地址:异常机制

    2、声明式事务

    在service层方法上添加Transactional注解,指定回滚异常类型

    //当出现Exception时,进行事务回滚
    @Transactional(rollbackFor = Exception.class)
    //当出现RunTimeException时,不进行事务回滚
    @Transactional(notRollbackFor=RunTimeException.class)
    
    • 1
    • 2
    • 3
    • 4

    提示:
    1、springboot项目并不需要@EnableTransactionManagement注解开启事务
    2、一般try catch都在controller层处理,service层进行回滚加上注解@Transactional(rollbackFor=Exception.class)即可,如果service正常执行,在controller层报错,则不会回滚

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    基于模糊认知图谱和遗传算法的龋齿度检测(Matlab代码实现)
    深度支持赛事宣发,DF平台助推第三届全国人工智能大赛顺利举办!
    Linux学习——目录操作和库使用
    Tailwind CSS浅析与实操
    51.Python-web框架-Django开始第一个应用的增删改查
    【Linux-进程状态】
    黑客赏金猎人平台之Immunefi
    java计算机毕业设计基于springboot企业人事工资管理系统
    MYSQL修改密码
    大厂面试必问:如何解决TCP可靠传输问题?8张图带你详细学习
  • 原文地址:https://blog.csdn.net/segegefe/article/details/126114240