sping--事务

事务的四大特性(ACID):

  原子性(Atomicity)

  一致性(Consistency)

  隔离性(Isolation)

  持久性(Durability)

事务属性:

1. propagation :指定事务的传播行为,即当前的事务方法被另外一个事务调用时如何使用事务
2. isolation : 指定事务的隔离级别,最常用的值为READ_COMMITED;
3. 回滚规则:事务的回滚规则,默认情况下声明式事务对所有的运行时异常进行回滚,也可以通过对应的属性进行设置,通常使用默认值;
4. readOnly:指定事务是否为只读,表示这个事务只读取数据但不更新数据,这样可以帮助数据库引擎优化事务;若真的是只读取的,应设置为true,否则默认为false;
5. timeout : 指定强制回滚之前事务可以占用的时间
 
事务的传播行为:
PROPAGATION_REQUIRED:表示当前方法必须运行在事务中。如果当前事务存在,方法将会在该事务中运行。否则,会启动一个新的事务
PROPAGATION_SUPPORTS:表示当前方法不需要事务,但是如果存在当前事务的话,那么该方法会在这个事务中运行
PROPAGATION_MANDATORY:表示该方法必须在事务中运行,如果当前事务不存在,则会抛出一个异常
PROPAGATION_REQUIRED_NEW:表示当前方法必须运行在它自己的事务中。一个新的事务将被启动。如果存在当前事务,在该方法执行期间,当前事务会被挂起。如果使用JTATransactionManager的话,则需要访问TransactionManager
PROPAGATION_NOT_SUPPORTED:表示该方法不应该运行在事务中。如果存在当前事务,在该方法运行期间,当前事务将被挂起。如果使用JTATransactionManager的话,则需要访问TransactionManager
PROPAGATION_NEVER:表示当前方法不应该运行在事务上下文中。如果当前正有一个事务在运行,则会抛出异常
PROPAGATION_NESTED:表示如果当前已经存在一个事务,那么该方法将会在嵌套事务中运行。嵌套的事务可以独立于当前事务进行单独地提交或回滚
 
隔离级别:
ISOLATION_DEFAULT:使用后端数据库默认的隔离级别
ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别,确保阻止脏读、不可重复读以及幻读,也是最慢的事务隔离级别,因为它通常是通过完全锁定事务相关的数据库表来实现的。

猜你喜欢

转载自www.cnblogs.com/niexinlei/p/9704919.html