一、事务定义是做什么用的?
告诉管理者需要对业务进行什么事务框架
二、事务定义的几种方式?可以定义些什么?
- xml2、注解方式。@Transactional
定义只读,传播行为,发生异常回滚,超时回滚
三、隔离级别:
事务隔离级别,即事务工作之间的隔离程度,数据之间的可互访性
参考来源:https://www.cnblogs.com/WJ-163/p/6023054.html
Read uncommitted<Read committed<Repeatable read<Serializable
1. ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
2. ISOLATION_READ_COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
3. ISOLATION_REPEATABLE_READ:这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
4. ISOLATION_SERIALIZABLE:这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
除了防止脏读,不可重复读外,还避免了幻像读。
四、7种传播行为
1、PROPAGATION_REQUIRED:当前有事务加入事务,否则创建一个新的事务。该设置是最常用的设置。
2、PROPAGATION_SUPPORTS:支持当前事务,有事务加入没有则非事务运行
3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
4、PROPAGATION_REQUIRES_NEW:无论当前存不存在事务,都创建新事务。
5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7、PROPAGATION_NESTED:若当前存在事务,嵌套事务。如果当前没有,则执行与PROPAGATION_REQUIRED类似的操作
五、其他
1.事务切面可以定义在那些层?
定义在Service层
2.TransactionManager会有很多种吗?
事务管理器可能会有多种:jdbc,mybatis、hibernate、jpa
3.什么是本地事务?什么是分布式事务?
本地事务就是数据库事务,只有一个数据源时,即本地事务,多个数据源即是分布式事务
4.各种方式的事务逻辑是一样的吗?
不是,是有区别的。
5.我们在代码中应用事务管理的方式是统一的吗?
是spring里的方式是统一的,管理控制一样,xml和注解方式的区别是实现类Bean不一样
6.架构spring事务管理建模
单一数据源:
分布式事务:
7.如何让事务应用者(框架使用者)对这些变化透明?
答:抽象,面向接口编程,策略模式。 PlatformTransationManager。
8.如何表示用户的事务定义?
答:TransationDefinition
9.如何表示开启的事务?
答:TransationStatus。
读数据源事务管理的源码时,需要验证三点:1、是否把连接放到了线程上下文,3是否是同一个连接,3、查看事务的传播