1.Spring事务传播性
在事务出现嵌套的时候,嵌套的事务是各自独立commit,还是内层的事务合并到外层的事务一起commit。
Spring事务传播的类型(TransactionDefinition.java)
1.1 PROPAGATION_REQUIRED
默认事务传播机制,如果外层有事务,则合并到外部事务,否则开启新的事务。
1.2 PROPAGATION_REQUIRES_NEW
每次开启新的事务,同时挂起外层事务,当内层事务执行完成后,再恢复挂起的外层事务。
1.3 PROPAGATION_SUPPORTS
如果外层有事务,则内层事务合并到外层事务,如果不存在外层事务,则不创建事务,直接以非事务方式执行。
1.4 PROPAGATION_NOT_SUPPORTED
不支持事务,如果外层有事务,则挂起外层事务,执行当前方法,执行完毕后,恢复外层事务。
1.5 PROPAGATION_NEVER
不支持事务,如果外层有事务,直接抛出异常。
1.6 PROPAGATION_MANDATORY
该类型的方法只能在已经存在事务的方法中被调用,如果在不存在事务的方法中被调用,则直接抛出异常。
1.7 PROPAGATION_NESTED
如果有一个活动的事务存在,则运行在一个嵌套的事务中;如果没有活动事务, 则按PROPAGATION_REQUIRED 属性执行,即开启新的事务。
2.Spring事务隔离机制
1.RU(ISOLATION_READ_UNCOMMITTED) 读未提交
该级别会导致读脏数据的问题。
2.RC(ISOLATION_READ_COMMITTED) 不可重复读
一个事务内,可以读取到其他事务已经commit的数据,会导致一个事务内,多次查询结果不一样。
3.RR(ISOLATION_REPEATABLE_READ) 可重复读
一个事务内,多次查询得到的数据结果和第一次查询到的结果是一样的,不管其他事务是否修改了这些数据。
4.ISOLATION_SERIALIZABLE 串行化
事务采取串行化执行,不存在并发情况。
5. ISOLATION_DEFAULT 默认隔离级别
即使用数据库的默认隔离级别。
Mysql 默认:可重复读;
Oracle 默认:读已提交;
PostgreSQL默认:读已提交;
SQL Server默认:读已提交;
DB2默认:读已提交。
网友评论