spring数据库事务总结
2018-03-05 21:59
211 查看
事务管理器
spring中数据库事务是通过PlatformTransactionManager进行管理的,通过它完成事务的创建、提交和回滚。spring中约定,事务产生异常时回滚,无异常时会提交事务。
spring中会将事务委托给transactionManager,mybatis中常用的数据库事务管理器是DataSourceTransactionManager,它继承AbstractPlatformTransactionManager,而后者实现了PlatformTransactionManager。
声明式事务
在spring中可以使用声明式事务和编程式事务,现在编程时事务几乎已经不再在企业中使用,因为代码可读性差。声明式事务又可以分为xml配置和注解事务,主流的方法是使用@Transaction注解声明事务。使用声明式事务需要配置注解驱动,加入以下配置就可以使用@Transactional配置事务了。
<tx:annotation-driver transaction-manager="transactionManager"/>
声明式事务底层原理是spring AOP 技术。
数据库事务特性
数据库事务正确执行的基础要素是原子性、一致性、隔离性和持久性。1. 隔离级别
事务的隔离级别包括脏读(dirty read)、读/写提交(read commit)、可重复读(repeatable read)、序列化(serializable)。脏读是允许一个事务去读取另一个事务中未提交的数据
(可以参考P345例),从而引起业务数据错误,若是金融项目会引发风险。为了克服脏读,sql提出了第二个隔离级别–读/写提交,一个事务只能读取另一个事务已经提交的数据。
选择隔离级别的出发点在于:1、性能;2、数据一致性。
大部分场景下,企业会选择读/写提交的方式设置事务。一般,从脏读到序列化系统性能直线下降,选择隔离级别高的比如序列化,会严重压制并发,从而引起线程挂起,直到获得锁才会进一步操作,总之,隔离级别需要根据并发的大小和性能做出决定,对于并发不大又要保证数据安全性的可以使用序列化的隔离级别,这样就保证了多事务环境下数据一致性问题。
@Transactional隔离级别的默认值是Isolation.DEFAULT,它会随数据库默认值的变化而变化。一般使用Isolation.READ_COMMIT
2. 传播行为
即 一个方法调用另一个方式可以对事务的特性进行传播配置。默认值Propagation.REQUIRED。
@Transaction(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMIT)
相关文章推荐
- spring+hibernate+tomcat+JTA跨数据库事务
- Spring学习总结(16)——Spring AOP实现执行数据库操作前根据业务来动态切换数据源
- Atitti 数据库事务处理 attilax总结
- Spring.Net实现跨数据库服务层事务管理
- 关于spring+mybatis操作数据库多次异常 事务不被spring管理问题
- spring事务管理总结
- Spring 数据库事务管理
- Spring的事务 之 9.1 数据库事务概述 ——跟我学spring3
- 事务、数据库事务、事务隔离级别、锁的简单总结
- spring事务详解(五)总结提高
- 跟我学Spring3(9.1):Spring的事务之数据库事务概述
- spring 事务管理 1(使用spring的JdbcTemplate访问数据库)
- Spring4的知识应用总结(六)——Spring事务管理机制
- Spring的事务传播属性,数据库的隔离级别
- 事务特性,事务的隔离级别,并发事务可能出现的问题,spring事务 数据库锁
- Spring添加了注解@Transactional事务不回滚总结
- [Spring框架]Spring 事务管理基础入门总结.
- spring事务的基本特性以及数据库隔离级别
- Spring中tx标签中propagation(事务传播特性)和isolation(数据库隔离级别)值的意思
- Spring事务总结