Spring事务是一种用于管理数据库事务的机制,它使开发人员能够在应用程序中声明性地处理事务。Spring框架提供了注解或XML配置的方式来处理事务,不需要手动编写繁琐的事务管理代码。
1. Spring事务简介
- 事务概念:在数据层保障一系列的数据库操作,要么同时成功,要么同时失败
- Spring事务概念:在数据层或业务层保障一系列的数据库操作,要么同时成功,要么同时失败
- 作用:保证他们在同一个事务中,当业务层中出现异常,整个事务就会回滚,保证数据的准确性
2. 相关技术介绍
- Spring为了管理事务,提供了一个平台事务管理器 PlatformTransactionManager
commit() 方法是用来提交事务,rollback() 方法是用来回滚事务
- 实现类 PlatformTransactionManager 事务管理器
实现类需要提供 DataSource 对象,即可实现 Spring 帮在业务层管理事务
3. 注解
- @EnableTransactionManagement
名称 | @EnableTransactionManagement |
类型 | 配置类注解 |
位置 | 配置类定义上方 |
作用 | 设置当前Spring环境中开启注解式事务支持 |
- @Transactional(默认只回滚 运行时异常)
解决方法:@Transactional (rollbackFor = Exception.class)
名称 | @Transactional |
类型 | 接口注解 类注解 方法注解 |
位置 | 业务层接口上方(推荐)、业务层实现类上方、业务方法上方(推荐) |
作用 | 为当前业务层方法添加事务(如果设置在类或接口上方,则类或接口中所有方法均添加事务) |
4. Spring事务属性
@Transactional 注解事务配置
- readOnly:true只读事务,false读写事务,增删改要设为false,查询设为true
- timeout:设置超时时间单位秒,在多长时间之内事务没有提交成功就自动回滚,-1表示不设置超时时间
- rollbackFor:当出现指定异常进行事务回滚
- rollbackForClassName:等同于rollbackFor,只不过属性为异常的类全名字符串
- noRollbackFor:当出现指定异常不进行事务回滚
- noRollbackForClassName:等同于noRollbackFor,只不过属性为异常的类全名字符串
- isolation:设置事务的隔离级别
- DEFAULT:默认隔离级别, 会采用数据库的隔离级别
- READ_UNCOMMITTED:读未提交
- READ_COMMITTED:读已提交
- REPEATABLE_READ:重复读取
- SERIALIZABLE:串行化
- propagation:事务的传播行为,即事务协调员对事务管理员所携带事务的处理态度,表示当一个事务方法被另一个事务方法调用时,应该如何进行事务控制