java 配置事务回滚_Spring@Transactional事务回滚
Spring中事务分为编程时事务和声明式事务,编程式事务:编程人员通过代码控制事务的开启、回滚、提交,声明式事务:把事务的处理交给spring。使用注解@transactional配置就是声明式事务。
基本配置
在applicationContext.xml配置文件中
1 //配置spring的DataSourceTransactionManager事务管理器
2
3 class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>
4 //指向的数据源
5
6 //配置事务注解驱动
7
然后在需要事务管理的地方加@Transactional 注解。
实现事务回滚需要注意的问题:
1.@Transactional 注解可以被应用于接口定义和接口方法、类定义和类的 public 方法上。
2.@Transactional 注解只能应用到 public 可见度的方法上。 如果你在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错,但是这个被注解的方法将不会展示已配置的事务设置。
3.默认情况下,spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚。
如果事务在try{}catch(Exception e){e.printStackTrace();}中跑,并且catch中只是打印e的话,那么事务不会rollback。因为异常被catch掉了,框架不知道发生了常。
如果想要rollback,
(1)注解上面写明异常类型即可,@Transactional(rollbackFor=Exception.class)
(2)在方法上添加 throws Exception,将方法中出现的异常抛出给spring事务
(3)去掉方法体中的try catch
(4)catch (Exception e) { throw e;}继续向上抛,目的是让spring事务捕获这个异常
除了以上注意的问题,说一下最近遇到的关于多数据源配置事务回滚的问题
在项目中关于事务该配置的也配置了,需要注意的问题也注意了,但有的事务可以出现回滚有的回滚失败,最终问题所在: id相同的事务配置分别配置在两个application.xml文件中,如果多个application.xml有配置,在web.xml中后加载的application.xml中的事务配置会覆盖最先加的application.xml中的事务配置。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179641.html原文链接:https://javaforall.cn
相关文章
- spring bean别名注解_java.lang.clonable是类
- Spring 全家桶之 Spring Framework 5.3(八)- Spring 整合 Java Web
- java calendar 设置小时_Java Calendar.set 方法设置时间的问题
- batch spring 重复执行_Spring Batch批处理
- java和基岩版区别_我的世界基岩版与Java版有什么区别?「建议收藏」
- 对java面向对象的三大特征的理解_Java面向对象的三大特征是什么?
- java setproperty 未生效_Java System类setProperty()方法及示例[通俗易懂]
- Java算法大全_java贪心算法几个经典例子
- Java框架Spring入门-第一个spring项目
- SpringBoot基础学习文章-Java环境变量配置Maven介绍Spring Boot介绍
- GraalVM-云原生时代的JVM(Java)
- 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )
- java 检测 Java 是否运行在64bit 的JVM上详解编程语言
- 库MySQL Database Backup with Java.(java备份mysql)
- java spring boot消息队列 RabbitMQ详解编程语言
- java,spring,tomcat,跨域设置详解编程语言
- 处理Redis Java: 处理数据过期(redisjava过期)
- 测试Java操作Redis实例(java测试redis)
- 高性能网络通信框架Netty-Netty客户端底层与Java NIO对应关系
- 如何在Linux系统中正确配置Java?(linux下配置java)
- 实现Java实现的Redis封装类:强化Redis技术支持(redis封装类java)
- 期Java开发高效配置MySQL长期支撑(mysql java 长)
- Linux 服务器快速部署Java开发环境(linux配置java)
- Linux下快速配置Java环境变量(linux设置java环境变量)
- Java配置Oracle实现稳定的跨平台数据库连接(java配置oracle)
- java清除u盘内存卡里的垃圾文件示例