SpringBoot系列—@Transactional 事务管理

本文详细介绍了SpringBoot中@Transactional注解的事务管理,包括ACID规则、传播行为如REQUIRED、SUPPORTS等的解释,并探讨了PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED的区别以及事务失效的解决策略。
摘要由CSDN通过智能技术生成

关系型数据库遵循ACID规则

事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:
1、A (Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。
2、C (Consistency) 一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。
3、I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。
4、D (Durabil
SpringBoot中,@Transactional注解可以用于实现对事务的管理。在使用SpringBoot与PostgreSQL的项目中,可以使用@Transactional注解来实现事务的回滚操作。当@Transactional注解被应用到方法上时,它会在方法执行前创建或者加入一个事务,并在方法执行完后根据执行情况提交或者回滚事务。这样可以确保在方法执行过程中出现异常时,事务能够正确地回滚。 在使用@Transactional注解时,需要注意以下几点: 1. 该注解只能应用于public修饰的方法上。 2. 默认情况下,Spring会对unchecked异常进行事务回滚,即对RuntimeException及其子类进行回滚操作。如果想对checked异常也进行回滚,可以在注解上指定rollbackFor属性,例如@Transactional(rollbackFor = Exception.class)。 3. 在service层进行try-catch操作时,如果异常被捕获了并且没有抛出,那么事务将不会回滚。如果想要在service层抛出异常并确保事务回滚,可以使用两种方法之一: a. 在catch块中手动设置事务回滚,例如TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()。 b. 在方法上抛出异常,让Spring自动捕获并回滚事务。 总之,通过在SpringBoot项目的方法上使用@Transactional注解,可以便捷地实现对事务的管理,并确保在方法执行过程中出现异常时能够正确地回滚事务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SpringBoot事务注解@Transactional](https://blog.csdn.net/qq_42772400/article/details/106136367)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [SpringBoot @Transactional事务回滚实现](https://blog.csdn.net/weixin_44407691/article/details/113094850)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值