Spring注解事务配置与传播行为详解
需积分: 10 92 浏览量
更新于2024-09-09
收藏 16KB DOCX 举报
"本文主要探讨了Spring框架中的注解式事务管理,包括其基本使用、事务的回滚规则以及传播行为。"
在Spring框架中,注解式事务管理提供了一种简洁的方式来控制事务的边界,使得开发者无需手动管理事务的开始、提交、回滚等操作。`@Transactional`注解是实现这一功能的关键,它可以应用在public方法上,对非public方法虽然不会报错,但不会提供事务管理。
当方法被`@Transactional`标记后,如果在方法内部发生了未检查异常(即继承自`RuntimeException`的异常),Spring会默认回滚事务。而如果抛出的是检查异常(即非`RuntimeException`的异常),默认情况下事务将会提交。这可以通过`rollbackFor`和`noRollbackFor`属性来改变这一默认行为。例如,`@Transactional(rollbackFor=Exception.class)`会让即使出现检查异常时也回滚事务,而`@Transactional(noRollbackFor=RuntimeException.class)`则会在遇到未检查异常时仍然提交事务。同样,`rollbackForClassName`和`noRollbackForClassName`可以用来指定基于异常类名的回滚和不回滚策略。
在读取数据而不涉及修改操作时,通常不需要事务管理。此时,可以利用事务的传播行为来告知Spring不需要开启事务。传播行为定义了事务如何与被调用的方法交互。例如,`@Transactional(propagation=Propagation.NOT_SUPPORTED)`会挂起当前事务,使得方法在无事务环境中执行。以下是Spring支持的几种事务传播行为:
1. `REQUIRED`: 这是默认的传播行为,表示方法必须在事务中运行。如果已经存在事务,则加入当前事务,否则新建一个事务。
2. `NOT_SUPPORTED`: 方法应该在无事务环境中运行。如果已经存在事务,那么事务会被挂起,待方法执行完毕后再恢复。
3. `REQUIRES_NEW`: 方法需要一个新的独立事务,无论当前是否存在事务,都会创建一个新的事务来执行方法,原有事务会被挂起。
4. `MANDATORY`: 方法必须在一个已存在的事务中运行,若不存在则抛出异常。
5. `SUPPORTS`: 方法是否在事务中运行取决于调用者。如果调用者在事务中,那么方法也在事务中运行,否则不在事务中。
6. `NEVER`: 方法不应该在事务中运行,如果在事务中则抛出异常。
7. `NESTED`: 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则行为类似于`REQUIRED`。
理解这些传播行为对于设计和实现事务管理至关重要的,它们可以帮助你根据业务逻辑选择合适的事务边界,从而保证数据的一致性和正确性。在实际开发中,应结合具体业务场景灵活运用这些特性,确保事务管理既高效又可靠。
2019-08-06 上传
2019-03-17 上传
点击了解资源详情
点击了解资源详情
2012-06-26 上传
2021-06-14 上传
2019-04-21 上传
2016-07-30 上传
2020-09-01 上传
贝贝up
- 粉丝: 15
- 资源: 8
最新资源
- rect-firefox:无鼠标浏览 有 有
- 基础 知识点/面试题总结 : (必看:+1: ): Java 基础常见知识点&面试题总结(上) Java 基础常见知识点&面试
- project_cinema_backend:project_cinema的后端逻辑
- 行业分类-设备装置-可适用于不同种类纸钞的封装装置和封装方法.zip
- Competitive-programming-
- kamVideo:测试React
- using-redux:使用Redux集中应用程序状态
- Bifocal:双焦演示页面
- 致力于搭建一个最好的 C/C++ 学习平台 很多人不知道是否应该入坑 C/C++ 很多人不知道如何准备 C/C++ 面试 很
- 行业数据-2019年中国电商渠道植发消费群体年龄分布及预测.rar
- random-user-react:我的第一个React项目。 Randomuser.me API
- GrapplingHook-plugin:所有版本支持的spigot Grappling Hook插件
- 收集一些VB基于ActiveX做窗体的小东西
- shogiwars:收集和分析将棋战棋记录(最新版本为https
- 使用python3 模拟烟花绽放 推荐一下我的博客(https://blog.csdn.net/qq-37963615) 效
- module-offline-payments:脱机支付应用程序