Java当中让事务回滚的几种方式
在 Java 中,可以通过使用事务来保证数据库操作的一致性和完整性。如果在事务过程中发生了异常或错误,需要将事务回滚,以保证数据的正确性和完整性。
下面是在 Java 中让事务回滚的几种方式:
使用 Spring 事务管理:在 Spring 中,可以使用 @Transactional 注解来标记需要进行事务管理的方法,同时可以设置 rollbackFor 属性指定回滚的异常类型。例如:
@Service @Transactional(rollbackFor = Exception.class) public class UserService { // ... }
在上述代码中,@Transactional 注解指定了回滚的异常类型为 Exception,如果在 UserService 中出现了 Exception 类型的异常,就会回滚事务。
手动回滚事务:如果不使用 Spring 事务管理,可以手动回滚事务。例如:
Connection conn = dataSource.getConnection(); try { conn.setAutoCommit(false); // 执行数据库操作 // 如果出现异常,手动回滚事务 conn.rollback(); } catch (SQLException e) { e.printStackTrace(); } finally { conn.setAutoCommit(true); conn.close(); }
在上述代码中,将数据库连接设置为手动提交模式,并在事务过程中根据需要执行数据库操作。如果出现异常,就手动回滚事务。总之,Java 中可以使用 Spring 事务管理或手动回滚事务等方式,来保证事务的一致性和完整性,并防止出现异常或错误时影响数据的正确性和完整性。
实现事务回滚需要注意的问题:
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中的事务配置。
总结
到此这篇关于Java当中让事务回滚的几种方式的文章就介绍到这了,更多相关Java事务回滚内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java Socket通信(一)之客户端程序 发送和接收数据
对于Socket通信简述,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容,Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容2016-03-03Gradle进阶使用结合Sonarqube进行代码审查的方法
今天小编就为大家分享一篇关于Gradle进阶使用结合Sonarqube进行代码审查的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2018-12-12java实现图片转base64字符串 java实现base64字符串转图片
这篇文章主要为大家详细介绍了java实现图片转base64字符串,java实现base64字符串转图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-02-02springboot+dynamicDataSource动态添加切换数据源方式
这篇文章主要介绍了springboot+dynamicDataSource动态添加切换数据源方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01
最新评论