1、 Spring事务管理

  事务管理:本质是使用spring管理事务,完成数据库对于事务的支持。

  事务:一系列对数据库操作的集合,一个操作错误,所有都必须回滚,其特点是acid。

(1)事务并发存在问题:

  脏读:事务读取数据无效。事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改。

  不可重复读:一个事务范围内两个相同的查询却返回了不同数据。由于查询时系统中其他事务修改的提交而引起的。侧重对同一个数据的修改。

  幻读:多个事务操作统一数据集。同样的条件, 由于事务T2的修改,第 1 次和第 2 次读出来的记录数不一样。侧重对数据集的增加和删除。

  丢失更新:事务T2操作覆盖了事务T1的操作。

(2)spring事务管理方法

  编程式事务管理(编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager),可以做到代码块事务的细粒度。

  声明式事务管理:建立在AOP之上的,其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。就不需要在业务逻辑代码中掺杂事务管理的代码。

  (包括两种方法:基于tx和aop名字空间的xml配置文件/基于@Transactional注解,对dao层注释)

@Transactional (propagation=Propagation.NOT_SUPPORTED) 
public class MyBatisServiceImpl implements MyBatisService {
         @Autowired
         private MyBatisDao dao;
         @Override
         public void insert(Test test) {
                  dao.insert(test); 事物传播行为是PROPAGATION_NOT_SUPPORTED,以非事务方式运行,不会存入数据库
                  //抛出unchecked异常,触发事物,回滚  
                  throw new RuntimeException("test");
         }

(3)事务隔离级别

  若干个并发的事务之间的隔离程度。

                  

Spring 中的事务管理面试题 spring事务管理 详解_数据库

(4)事务传播行为

  在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行。

                  

Spring 中的事务管理面试题 spring事务管理 详解_事务管理_02