Spring的隔离级别和数据库的隔离级别

J2EE 码拜 10年前 (2015-04-17) 1546次浏览 0个评论

看书上说Spring的隔离级别是对数据库隔离级别的封装,隔离级别分类都一样(Spring多了个default很好理解了),我还是不大明白其中正真的含义:
1.如果Spring定义的隔离级别和数据库设置的隔离级别不一样,以谁的为准?
2.对于第一个问题,以Spring定义的为准的话,Spring定义的级别怎么影响到数据库的呢?通过设置和数据库会话的临时隔离级别

Spring的隔离级别和数据库的隔离级别
spring提供配置需要数据库的支持,最终肯定都是以数据库为准。 比如spring配置了SERIALIZABLE,但数据库根本不支持,那这个配置肯定是没用的呀。

个人感觉数据库其实没有隔离级别这个概念, 都是通过数据库锁,共享锁、独自锁什么的。 你可以先理解这里的相关概念再去看spring事务管理。

其实我也不懂…, 期待高手回答

Spring的隔离级别和数据库的隔离级别
隔离级别是针对事务来说的,每个事务都有其自己的隔离级别,事务的执行顺序如下:
1、开启事务
2、设置事务的隔离级别(不设置的话就使用默认隔离级别)
3、执行SQL
4、提交事务
这个过程可以放在数据库直接写,如果用Spring管理了,最终也是反映到数据库里面,两者没什么区别,如果是正常的执行普通SQL,我想不到在Spring里管理这一个过程时,数据库哪里能再修改隔离级别,所以你说的“如果Spring定义的隔离级别和数据库设置的隔离级别不一样”就不用考虑了,当然如果Spring调用的是存储过程,存储过程自己开启了事务,也设置了隔离级别,这时候Spring也级开启了事务,同样设置了隔离级别,这个情况我没有试过。
Spring的隔离级别和数据库的隔离级别
60分
举个列子:
可以去看看spring源码的DataSourceTransactionManager类下的doBegin(Object transaction, TransactionDefinition definition),
DataSourceUtils.prepareConnectionForTransaction(con, definition);会设置此时事务开始时Connection的隔离级别。
然后我猜测就由jdbc驱动和数据库来处理,这边就和基于jdbc写事务处理相似了,设置不自动提交等等。
如果spring设置的隔离级别数据库不支持,可能会默认使用数据库本身设置的隔离级别处理了。
Spring的隔离级别和数据库的隔离级别
应该以数据量的为准吧,毕竟不是所有的数据库都支持相同的隔离级别
Spring的隔离级别和数据库的隔离级别
引用 楼主 h82204 的回复:

看书上说Spring的隔离级别是对数据库隔离级别的封装,隔离级别分类都一样(Spring多了个default很好理解了),我还是不大明白其中正真的含义:
1.如果Spring定义的隔离级别和数据库设置的隔离级别不一样,以谁的为准?
2.对于第一个问题,以Spring定义的为准的话,Spring定义的级别怎么影响到数据库的呢?通过设置和数据库会话的临时隔离级别?

肯定是已数据库的为准


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Spring的隔离级别和数据库的隔离级别
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!