spring事务

(20200811将这些天复习的内容放到博客备份)

spring事务

  1. 事务的特性:ACID(同数据库四大特性)
  2. 配置方式:

(1) 编程式事务管理:侵入式事务管理,直接使用TransactionTemplate进行管理

(2) 声明式事务管理:非侵入式事务管理,只需在配置文件中做相关文件声明或者使用注解;缺点:声明式事务管理管理的粒度是方法级别,而编程式事务管理是可以到代码块的

 

  1. 事物的传播机制(特性):

(1) PROPAGATION_REQUIRED:spring的默认传播机制,如果外层有事务,则和外层的事务一起提交和回滚,如果外层没有事务,则创建一个事务执行。

(2) PROPAGATION_REQUES_NEW:外层有事物,挂起外层事务,待当前事务执行完再恢复外层事务;外层没有事务,创建一个事务执行

(3) PROPAGATION_SUPPOT:外层有事物,就加入外层事务执行,外层没有事务就按非事务方式执行

(4) PROPAGATION_NOT_SUPPOT:外层有事务,就挂起外层事务,待当前代码执行完,再恢复外层事务;外层没有事物,就按非事务方式执行

(5) PROPAGATION_NEVER:外层有事物,就抛出异常

(6) PROPAGATION_MANDATORY:外层没有事务,就抛出异常

(7) PROPAGATION_NESTED:外层有事物就嵌套进外层事务;外层没有事务就创建一个事务执行(类似PROPAGATION_REQUIRED )。特点是有状态保存点,就是当前事务回滚到某个点,从而避免所有嵌套事务都回退,各自回退各自的

  1. 事务的隔离级别:

(1) ISOLATION_DEFAULT(默认):后端数据库默认端隔离级别

(2) ISOLATION_READ_UNCOMMITED(未提交读):允许读未提交的数据,存在的问题:脏读,不可重复度,幻象读

(3) ISOLATION_REAF_COMMITIED(已提交读,Oracle默认隔离级别):允许读取已提交的数据;已解决的问题:脏读,未解决的问题:不可重复读,幻想读

(4) ISOLATION_REPEATABLE_READ(可重复读,MySQL默认隔离级别):对相同字段多次读取时一致的;已解决的问题:脏读,不可重复读,未解决的问题:幻象读

(5) ISOLATON_SERIALIZABLE(可序列化):完全服从ACID的隔离级别,确保不发生脏读,不可重复的,幻象读

  1. 只读事务:没有修改操作,会在运行时做一定的优化
  2. 事务超时:给一个事务设置一个最长运行时间,若超过这个时间还没完成,就自动回滚事务。若一个事务长时间运行,不必要的占用数据库资源
  3. 回滚规则:运行时异常回滚,受检查异常不回滚;也可以手动设置某一个异常回滚
原文地址:https://www.cnblogs.com/yu-xia-zheng-ye/p/13479846.html