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