解决方案 »

  1.   

    spring提供配置需要数据库的支持,最终肯定都是以数据库为准。 比如spring配置了SERIALIZABLE,但数据库根本不支持,那这个配置肯定是没用的呀。个人感觉数据库其实没有隔离级别这个概念, 都是通过数据库锁,共享锁、独自锁什么的。 你可以先理解这里的相关概念再去看spring的事务管理。其实我也不懂..., 期待高手回答
      

  2.   

    隔离级别是针对事务来说的,每个事务都有其自己的隔离级别,事务的执行顺序如下:
    1、开启事务
    2、设置事务的隔离级别(不设置的话就使用默认隔离级别)
    3、执行SQL
    4、提交事务
    这个过程可以放在数据库直接写,如果用Spring管理了,最终也是反映到数据库里面,两者没什么区别,如果是正常的执行普通SQL,我想不到在Spring里管理这一个过程时,数据库哪里能再修改隔离级别,所以你说的“如果Spring定义的隔离级别和数据库设置的隔离级别不一样”就不用考虑了,当然如果Spring调用的是存储过程,存储过程自己开启了事务,也设置了隔离级别,这时候Spring也级开启了事务,同样设置了隔离级别,这个情况我没有试过。
      

  3.   

    举个列子:
    可以去看看spring源码的DataSourceTransactionManager类下的doBegin(Object transaction, TransactionDefinition definition),
    DataSourceUtils.prepareConnectionForTransaction(con, definition);会设置此时事务开始时Connection的隔离级别。
    然后我猜测就由jdbc驱动和数据库来处理,这边就和基于jdbc写事务处理相似了,设置不自动提交等等。
    如果spring设置的隔离级别数据库不支持,可能会默认使用数据库本身设置的隔离级别处理了。