spring事务

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_READ_COMMITIED(读已提交,Oracle默认隔离级别):允许读取已提交的数据;已解决的问题:脏读,未解决的问题:不可重复读,幻想读

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

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

  1. 只读事务:没有修改操作,会在运行时做一定的优化
  2. 事务超时:给一个事务设置一个最长运行时间,若超过这个时间还没完成,就自动回滚事务。若一个事务长时间运行,不必要的占用数据库资源
  3. 回滚规则:运行时异常回滚,受检查异常不回滚;也可以手动设置某一个异常回滚
posted @ 2020-08-11 20:25  雨下_整夜  阅读(128)  评论(0)    收藏  举报