事务特性 ACID
- 原子性
- 一致性
- 永久性
- 隔离性
事务的属性
传播属性
Propagation: 定义事务的边界,用来定义当前方法是否需要事务,常用于取值。
- REQUIRED
必须添加事务,如果当前没有事务,则创建一个新的事务,一般用于增删改操作 - SUPPORTS
可以没有事务,如果当前有事务则运行,如果没有事务也可以运行,一般用于查询操作。
隔离级别
isolation: 用于解决事务并发时候出现的问题。
* READ_COMMITTED,已提交度--->避免脏读,但可能发送不可重复读或者幻读
* READ_UNCOMMITTED 未提交读----->可能会发生脏读、不可重复读和幻读
* REPEATABLE_READ 可重复读-------->避免脏读和不可重复读,但可能发生幻读
*SERIALIZABLE 可系列化------>避免脏读、不可重读和幻读,相当于但并发,没意义
* 脏读:一个事务读取到另外一个事务没有提交的数据。
* 不可重复读:一个事务已经读取数据,另外一个事务在修改数据,可能导致使用的数据与数据库不同步
* 幻读或虚读: 一个事务已经读取数据,另外一个事务在添加或者删除数据,可能导致使用的数据量与数据库不同步。
回滚条件
rollback:默认抛出RuntimeException 时才会回滚
rollbackFor="" 表示发送该异常时回滚
noRollbackFor="" 表示发送该异常不会滚
只读优化
readOnly:该事物中只能读取,一般用于查询
超时处理
timeout: 配置事务的超时时间,一般不配置。