Spring事务细节
2018-03-21 11:50
211 查看
1、事务的传播性
问题:当有两个事务嵌套执行时,那么其中一个事务发生异常另一个事务是否需要回滚呢?思考模式:把事务看成一个对象,看看这两个事务有没有共用一个事务对象:
若共用一个,则都成功或都失败;
若没有共用一个事务对象,则两个事务之间没有关系。
事务传播性的几种类型:
1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘
3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
4、PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
2、事务的隔离性
问题:1、脏读:两个事务,一个事务改了值但是还没提交,另一个事务读了改之后的值,第一个事务回滚了,导致第二个事务读到的是脏数据怎么办?(最严重!!!绝不能允许发生!!!)
2、不可重复读:两个事务,一个事务读了数据,另一个事务改了数据,这个第一个事务在来读这个数据发现读到的数据不一样了怎么办?
3、幻读:两个事务,一个事务插入了几条数据,另一个事务又插入的几条数据,这时第一个事务在来读发现数据多了,感觉自己出现了幻觉。这种情况怎么办?
解决方案:
数据库事务的隔离级别有4种,由低到高分别为:
Read uncommitted(读未提交,可以读未提交的数据)
Read committed (读已提交,只能读已提交的数据)
Repeatable read (可重复读,一个事务结束前保证每次读到的数据都一样)
Serializable(串行化,不推荐,等待一个事务提交(commit),其他事务才开始执行)
相关文章推荐
- Spring事务细节
- Spring事务细节
- Spring事务细节
- Spring事务细节
- Spring事务细节
- spring声明事务管理~之细节session.getCurrentSession()~~~~
- Spring事务细节
- Spring事务细节
- Spring事务细节
- spring声明事务管理之细节session.getCurrentSession()
- Spring事务细节
- Spring事务的一些细节问题
- 关于Spring4+Hibernate4架构升级-整合的细节处理-由nested transactions not supported错误解决引申到事务嵌套问题处理
- springmvc+hibernate环境,事务细节
- Spring事务细节
- Spring事务细节
- Spring配置事务使用getCurrentSession()
- spring事务声明的几种传播特性
- Spring事务配置的五种方式
- SPRING事务逻辑探究和多数据源解决方案调研