spring-事务
https://www.cnblogs.com/caoyc...
http://www.cnblogs.com/yepei/...
http://blog.csdn.net/y9436239...
隔离前可能发生的现象
- 脏读 : 一个事务读取到另一事务未提交的更新数据
- 不可重复读 : 在同一事务中, 多次读取同一数据返回的结果有所不同, 换句话说, 后续读取可以读到另一事务已提交的更新数据. 相反,
- "可重复读"在同一事务中多次读取数据时, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据
- 幻读 : 一个事务读到另一个事务已提交的insert数据
事务的隔离机制
- @Transactional(isolation = Isolation.READ_UNCOMMITTED):读取未提交数据(会出现脏读,
不可重复读) 基本不使用 - @Transactional(isolation =
Isolation.READ_COMMITTED):读取已提交数据(会出现不可重复读和幻读) - @Transactional(isolation = Isolation.REPEATABLE_READ):可重复读(会出现幻读)
- @Transactional(isolation = Isolation.SERIALIZABLE):串行化
- MYSQL: 默认为REPEATABLE_READ级别
- SQLSERVER: 默认为READ_COMMITTED
事务的传播行为
- @Transactional(propagation=Propagation.REQUIRED) :如果有事务, 那么加入事务,
没有的话新建一个(默认情况下) - @Transactional(propagation=Propagation.SUPPORTS)
:如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务. - @Transactional(propagation=Propagation.MANDATORY)
:必须在一个已有的事务中执行,否则抛出异常 - @Transactional(propagation=Propagation.REQUIRES_NEW)
:不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务 - @Transactional(propagation=Propagation.NOT_SUPPORTED)
:容器不为这个方法开启事务,以非事务方式运行,如果当前存在事务,则把当前事务挂起 - @Transactional(propagation=Propagation.NEVER)
:必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。
相关推荐
DriveCar 2020-09-07
qingjiuquan 2020-07-18
zhanbuquan 2020-07-04
zhanbuquan 2020-06-21
variab 2020-06-13
langyue 2020-06-09
DriveCar 2020-06-09
quniMdejiangyou 2020-08-15
silencehgt 2020-07-04
lpfvip00 2020-06-25
sunysh00 2020-06-11
vincen 2020-06-10
sofast 2020-06-03
weikaixxxxxx 2020-05-30
neweastsun 2020-05-27
sunysh00 2020-05-25
zjx0 2020-05-20
愿天下再无BUG 2020-05-16
pengpengflyjhp 2020-05-14
MissFuTT 2020-05-11
inhumming 2020-05-10
好记忆也需烂 2020-05-10
silencehgt 2020-05-09