SpringBoot事物Transaction实战讲解教程 - 虚无境 - 博客园
编程式事务管理 声明式事务管理
TransactionTemplate @Transactional
默认情况下,数据库处于自动提交模式。使用spring进行事物管理的时候,spring会将是否自动提交设置为false,等价于JDBC中的 connection.setAutoCommit(false);,在执行完之后在进行提交,connection.commit(); 。
隔离级别
读未提交 读以提交(default) 可重复度 串行化
不可重复读 (另外一个事务对数据进行了更新,读到了不同的结果.) 读锁和写锁冲突
传播行为 (如果在开始当前事务之前,一个事务上下文已经存在)7种
如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。
创建一个新的事务,如果当前存在事务,则把当前事务挂起。
如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
以非事务方式运行,如果当前存在事务,则把当前事务挂起。
以非事务方式运行,如果当前存在事务,则抛出异常。
如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。
事务回滚规则
默认配置下,spring只有在抛出的异常为运行时unchecked异常时才回滚该事务,也就是抛出的异常为RuntimeException的子类(Errors也会导致事务回滚),而抛出checked异常则不会导致事务回滚。可以明确的配置在抛出那些异常时回滚事务
事务常用配置
readOnly(只读) rollbackFor(那些异常回滚) propagation(传播行为) isolation(隔离级别) timeout(超时会回滚)
@EnableTransactionManagement @Transactional
网友评论