天天看点

Transaction 事务

基于 XML 实现事务管理

Spring 的事务管理有两种方式:一种是传统的编程式事务管理,即通过编写代码实现的事务管理;另一种是基于 AOP 技术实现的声明式事务管理。由于在实际开发中,编程式事务管理很少使用,所以我们只对 Spring 的声明式事务管理进行详细讲解。

Spring 声明式事务管理在底层采用了 AOP 技术,其最大的优点在于无须通过编程的方式管理事务,只需要在配置文件中进行相关的规则声明,就可以将事务规则应用到业务逻辑中。

基于 Annotation 实现事务管理

Spring容器在默认情况下,遇到运行期例外(uncheckedException–RuntimeException),会进行事务回滚;遇到checked Exception(checked Exception–需要try catch抓取的例外)不会进行回滚

//以下为三个事务传播属性,其他的查阅API可知
@Transactional(propagation = Propagation.NOT_SUPPORTED)
@Transactional(noRollbackFor = RuntimeException.class)
@Transactional(isolation)
//事务隔离级别,一般通过数据库系统提供以供用户选择,不同事务隔离级别采用不用的锁类型来实现;
//PS:事务隔离级别越高,对并发性能的影响越大
           

可重复读:在同一事务中多次读取数据时,能够保证所读取的数据一致,即后续读取不能读取另一事物已提交的更新数据–可重复读一般通过快照来实现

幻读:一个事务读取另一个事务已提交的insert数据–幻读一般是由于并发产生的