当前位置: 首页 > wzjs >正文

鸿鹄网站建设太原网络推广公司

鸿鹄网站建设,太原网络推广公司,怎么在网上创建网站,深度网站建设一、什么是事务回滚? 事务回滚指的是:当执行过程中发生异常时,之前对数据库所做的更改全部撤销,数据库状态恢复到事务开始前的状态。这是数据库“原子性”原则的体现。 二、Spring 中的 Transactional 默认行为 在 Spring 中&am…

一、什么是事务回滚?

事务回滚指的是:当执行过程中发生异常时,之前对数据库所做的更改全部撤销,数据库状态恢复到事务开始前的状态。这是数据库“原子性”原则的体现。


二、Spring 中的 @Transactional 默认行为

在 Spring 中,使用注解方式开启事务非常简单:

@Transactional
public void doSomething() {// 执行数据库操作
}

此时的默认行为是:

  • 事务会在方法成功执行后提交;
  • 遇到 RuntimeExceptionError,会自动回滚;
  • 遇到 Checked Exception(即编译时异常),不会自动回滚。

例如:

@Transactional
public void test1() {throw new RuntimeException(); // ✅ 会回滚
}@Transactional
public void test2() throws Exception {throw new Exception(); // ❌ 不会回滚
}

三、使用 rollbackFor 让事务回滚受检异常

如果你希望事务在任何异常发生时都回滚,包括受检异常,比如 IOExceptionSQLException,就需要显式指定:

@Transactional(rollbackFor = Exception.class)
public void test3() throws Exception {throw new Exception(); // ✅ 会回滚
}
  • rollbackFor 的值可以是一个或多个异常类;
  • 你可以根据需要选择只对某些异常类型回滚,其他的则不回滚。

四、rollbackForrollbackOn 的区别

特性rollbackForrollbackOn
适用范围SpringJava EE / JTA
包名org.springframework.transaction.annotation.Transactionaljavax.transaction.Transactional
默认行为回滚RuntimeException不回滚任何异常
明确配置后可回滚任何指定异常可回滚任何指定异常

示例比较:

Spring 中的写法:
import org.springframework.transaction.annotation.Transactional;@Transactional(rollbackFor = Exception.class)
public void springTransaction() throws Exception {throw new Exception("测试受检异常");
}
JTA(Java EE)中的写法:
import javax.transaction.Transactional;@Transactional(rollbackOn = Exception.class)
public void jtaTransaction() throws Exception {throw new Exception("测试受检异常");
}

注意:使用的是不同的注解类,不能混用!


五、常见误区

❌ 误区1:以为所有异常都会触发事务回滚

Spring 默认只回滚 RuntimeException,不会回滚 Exception(受检异常)。这是导致事务未回滚的最常见原因。

❌ 误区2:以为 @Transactional 可以应用于任何方法

只有被 Spring 容器管理(即被 Spring 扫描并代理)的类中的 public 方法,@Transactional 才有效。如果你在 private 方法上加了注解,是不会生效的。

❌ 误区3:使用错误的注解类

Spring 和 JTA 的 @Transactional 注解来自不同的包,使用时务必导入正确:

  • Spring: org.springframework.transaction.annotation.Transactional
  • JTA: javax.transaction.Transactional

六、小结

常见问题与解决方式

问题默认行为解决方式
事务不回滚受检异常❌ 不回滚✅ 添加rollbackFor = Exception.class(Spring)或 rollbackOn = Exception.class(JTA)
事务注解不生效❌ 方法不是public,类未被 Spring 管理✅ 保证类被 Spring 扫描,方法为public
导入错误注解❌ 使用了错误的@Transactional 注解✅ 使用正确包名下的注解(见下表)

Spring 与 JTA 的 @Transactional 对比

特性SpringJTA(Java EE)
注解类全名org.springframework.transaction.annotation.Transactionaljavax.transaction.Transactional
默认回滚行为回滚RuntimeException,不回滚 Exception不回滚任何异常
控制参数rollbackFor, noRollbackForrollbackOn, dontRollbackOn
常见场景Spring Boot, Spring MVC 项目Java EE, Jakarta EE 应用服务器项目
建议用法用 Spring 的事务注解为主仅在 Java EE 项目中使用

七、结语

事务控制是保障系统数据一致性的重要手段,理解事务的回滚机制尤为重要。在实际开发中,推荐明确指定异常回滚策略,避免因受检异常不回滚而造成数据异常。

希望这篇文章能帮你在开发中更精准地使用 @Transactional,写出更健壮、可控的代码。如果你有更多问题,欢迎留言讨论!

http://www.dtcms.com/wzjs/36879.html

相关文章:

  • 如何做微信收费视频网站网站排名靠前方法
  • 江西省赣州市有什么好玩的地方seo最新技巧
  • 网站广告图片在线制作百度热度
  • 网络规划设计师历年试题分析与解答深圳搜索排名优化
  • 金融类的网站怎么做sem是什么的缩写
  • 版面设计网站免费发帖平台
  • 技术支持 长沙网站建设-创研科技口碑营销ppt
  • 网站建设绩效考核方案ppt推广自己产品的文案
  • wordpress推特登陆西安排名seo公司
  • 中国建设网站简州新城土地整改项目营销推广方案设计
  • 建设门户网站需要注意什么专门做推广的公司
  • 网站搭建后怎么操作seo链接优化建议
  • wordpress评论表情不显示不出来seo怎么刷关键词排名
  • 运输房产网站建设网络热词2023流行语及解释
  • 泰安企业建站公司哪里找郑州做网站哪家好
  • 做网站年赚千万竞价推广是做什么的
  • 网站建设可以网上兼职吗企业网站
  • 优秀网站建设模板百度推广登陆平台
  • 做外贸网站外包培训班有哪些
  • 网站建设的目的奖券世界推广网站
  • 中山推广网站关键词排名关键词优化
  • 如何对网站进行改版免费手机网页制作
  • 定制型网站一般价格产品的推广及宣传思路
  • 哪个网站专门做高清壁纸朋友圈营销广告
  • 东莞seo网站建设公司seo课程总结
  • 江苏国龙翔建设网站seo3
  • 企业营销网站建设策划书端口扫描站长工具
  • 定制化网站开发公司优化设计全部答案
  • 广州做网站seo谷歌搜索引擎营销
  • b2c网站可分为国际军事新闻