Spring是如何管理事务的,事务关机机制?以及隔离级别?

问题分析

主要考察事务的4种隔离级别,如何使用spring进行事务管理及声明式事务管理。

核心问题讲解

数据隔离级别分为不同的四种:

如果不考虑事务的隔离性,引发一些安全性问题:

  • 脏读:一个事务读到另一个事务还没有提交的数据。
  • 不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致在当前的事务中多次查询结果不一致。
  • 虚读/幻读:一个事务读到另一个事务已经提交的insert的数据,导致在当前的事务中多次的查询结果不一致。


  • read uncommitted:未提交读。脏读,不可重复读,虚读都可能发生。
  • read committed:已提交读。避免脏读。但是不可重复读和虚读有可能发生。
  • repeatable read:可重复读。避免脏读、不可重复读。但是虚读有可能发生。
  • serializable:串行化的。避免脏读、不可重复读、虚读的发生。

总结:级别越高越安全,但同时效率也就越低。


Spring的事务机制包括声明式事务和编程式事务:

编程式事务管理:Spring推荐使用TransactionTemplate,但实际开发中使用声明式事务较多。
声明式事务管理:将我们从复杂的事务处理中解脱出来,获取连接,关闭连接、事务提交、回滚、异常处理等这些操作都不用我们处理了,Spring都会帮我们处理。
声明式事务管理使用了AOP面向切面编程实现的,本质就是在目标方法执行前后进行拦截。在目标方法执行前加入或创建一个事务,在执行方法执行后,根据实际情况选择题交或是回滚事务。

发布于 2021-04-26 12:11