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