@Transactional遇到try catch失效的问题

 更新时间:2022年01月25日 16:53:35   作者:海子<‘_’>  
这篇文章主要介绍了@Transactional遇到try catch失效的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

@Transactional遇到try catch失效

Springboot中@Transactional遇到了try catch失效了,需要手动回滚

try {
                        user.setExpire(Integer.parseInt(expire));
                        userService.updateById(user);
                        Host host = hostService.getById(user.getHostId());//查询数据库的host信息
                        updateResponse = proxmoxConfig.updateEffectiveTime(user.getUserName(), expire, host.getHostUrlRequest());
                    } catch (Exception e) {
                        e.printStackTrace();
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    }

@Transactional与try..catch同时使用的经验

@transactional 是我们在java 开发中经常用到的注解,帮助我们非常方便快捷的完成事务管理,尤其在批量处理数据的时候,更是重要,最近业务中遇到了这种情况,

批量向数据库导入数据,这就会出现excel表中有的数据类型符合导入要求,有的不符合,当我们导入的时候要么就全部成功的导入,要么就失败都不导入,如果不用事务的话就会出现数据正确的会导入到数据库,不正确的就没导入,造成数据的不一致性,

可我的业务不仅仅是用@transactional 注解完成事务,而且当出现数据不符抛异常的时候还要返回错误的提示,所以我还得结核try...catch 块,问题来了,用try...catch就是捕获异常,然后处理掉,而 @transactional 是要在系统抛异常的时候才能起到事务回滚的作用,

后来我查了一些资料,如下操作:

重点就是TransactionAspectSupport.currentTransactionStatus().setRollbackOnly 这个方法,它会起到异常回滚的作用,这样我就可以在它执行完之后,设置需要返回的自定义的信息

最近又遇到了@transactional 注解不起作用的问题了,这一次的情况是原来我的mysql 数据库默认用的是MyISAM 引擎,而这个存储引擎不支持事务,所以需要对数据库的进行一下操作:在控制台输入  alter table xxx(表名) engine=InnoDB 然后你可以在输入show create table xxx(表名) 来查看是否修改成功

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中面向对象的知识点总结

    Java中面向对象的知识点总结

    Java是一门面向对象的语言。对象是Java程序中的基本实体。除了对象之外Java程序同样处理基本数据。下面这篇文章主要给大家总结了关于Java中面向对象的知识点,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • 前端和后端时间不一致问题解决的实践指南

    前端和后端时间不一致问题解决的实践指南

    这篇文章主要给大家介绍了关于前端和后端时间不一致问题解决的实践指南,在SpringBoot项目中,可以通过设置application.yml文件中的属性来统一时间格式和时区,从而确保序列化和反序列化过程中的时间和时区一致性,需要的朋友可以参考下
    2025-01-01
  • Java利用LocalDate进行日期处理的完全指南

    Java利用LocalDate进行日期处理的完全指南

    这篇文章主要为大家详细介绍了Java利用LocalDate进行日期处理的详细教程,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • SpringIOC的注解应用方式

    SpringIOC的注解应用方式

    在Spring框架中,除了通过xml配置文件进行Bean管理外,还可以采用注解的方式实现Bean的注册和自动装配,通过在类上添加@Component、@Service、@Repository、@Controller等注解,可以将Bean注册到IOC容器中
    2024-11-11
  • 实例分析Java泛型

    实例分析Java泛型

    本篇文章通过代码实例给大家讲述了Java泛型的相关知识点以及相关的代码分析,对此有兴趣的朋友学习下。
    2018-02-02
  • 解决SpringBoot启动过后不能访问jsp页面的问题(超详细)

    解决SpringBoot启动过后不能访问jsp页面的问题(超详细)

    这篇文章主要介绍了解决SpringBoot启动过后不能访问jsp页面的问题,文中通过示例代码介绍的非常详细,有需要的朋友可以参考一下,希望对你有所帮助。
    2020-05-05
  • JAVA实现redis分布式双重加锁的示例代码

    JAVA实现redis分布式双重加锁的示例代码

    在高并发环境下,通过Redis分布式锁实现数据唯一性校验非常关键,为避免用户数据重复,可使用Redis锁或集合数据结构进行前置检查,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • java实现表单必填参数验证的方法

    java实现表单必填参数验证的方法

    表单校验是很多注册时必做的功能, 一般我们的处理都是很粗暴的写个if()判断, 然后抛异常. 本文将介绍通过代理的思想, 用注解优雅的处理非空判断,感兴趣的一起来了解一下
    2021-05-05
  • gradle和maven打包时排除application.properties问题

    gradle和maven打包时排除application.properties问题

    文章主要介绍了Gradle、Maven(用于构建JAR包)和Maven(用于构建WAR包),文章基于个人经验,为读者提供了参考,并鼓励大家支持脚本之家
    2024-12-12
  • SpringBoot+mybatis+thymeleaf实现登录功能示例

    SpringBoot+mybatis+thymeleaf实现登录功能示例

    这篇文章主要介绍了SpringBoot+mybatis+thymeleaf实现登录功能示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论