分享人:慕孟洋
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
转账的案例
理解事务之前,先讲一个你日常生活中最常干的事:转账。
张三给李四转账100元。那数据库假设需要 张三扣100,李四加100,记录一条流水。
如果流水没记录成功,那整体回滚,张三也没转账成功,李四也没多钱。
事务就是用来解决类似问题的。
事务是一系列的动作,它们综合在一起才是一个完整的工作单元, 这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。
在企业级应用程序开发中,事务管理必不可少的技术,用来确保数据的完整性和一致性。
事务有四个特性:ACID
原子性(Atomicity):事务是一个原子操作,由一系列动作组成。
事务的原子性确保动作要么全部完成,要么完全不起作用。
一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,
而不会是部分完成部分失败。在现实中的数据不应该被破坏。
隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响, 这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。
事务传播行为
事务规则也就是事务传播行为,用于解决业务层方法之间的相互调用的问题
常见的事务传播行为
REQUIRED:
表示当前方法必须运行在一个事物环境中,如果一个现有的事物正在运行, 该方法将运行在这个事务中,否则,就要开始一个新的事务
REQUIRESNEW
表示当前方法必须运行在自己的事务里
SUPPORTS
表示当前方法不需要事务处理环境,但如果有一个事务正在运行的话,则这个方法也可以运行在这个事务中
MANDATORY
表示当前方法必须运行在一个事务上下文中,否则就抛出异常
NEVER
表示当前方法不应该运行在一个事务上下文中,否则就抛出异常
有哪些方式实现事务管理
Spring 事务管理有两种方式
一种是编程式事务管理,即通过编写代码实现事物管理,
包括定义事务的开始,程序正常执行后的事物提交,异常时进行的事务回滚。
另一种是基于AOP技术实现的声明式事务管理
其主要思想是将事务管理作为一个“切面”代码单独编写,我们只用关心核心业务逻辑代码, 然后通过AOP技术将事务管理的“切面”代码织入到业务类中
声明式事务管理有包括基于AOP方式的事务管理和基于 @Transactional注解方式的事务管理
声明式事务管理极大的简化了编程式事务管理的操作流程,不再需要重复地执行定义事物的开始,
程序正常执行后事务提交,异常时进行事物回滚这些繁琐的操作,
而基于 @Transactional注解的声明式事务又进一步简化了基于AOP的事务管理,减少了Spring配置代码。
声明式事务的缺点在于只能作用到方法级别,无法做到像编程式事务那样能控制到代码块级别。
参考:https://www.cnblogs.com/zhaozihan/p/6219776.html
Spring事务管理案例
......
感谢大家观看
BY : 慕孟洋