zoukankan      html  css  js  c++  java
  • spring-事务管理学习

    Ok,spring的源码学习到了事务这块就大概要告一段落了,后续如果有机会的话,会开启spring-boot的学习。不过目前还是打算把下一段的学习计划放在其他事情上。先对事务这块做一个简要的学习笔记,后续的规划再说。

    总体来说,Spring的事务管理的实现,是通过aop来实现的,其实也很好理解,对一个方法加上事务,也就意味着在方法执行之前,需要begin这个事务,在方法结束后,需要做commit操作,如果方法执行失败,就进行回滚操作。

    这里主要说下声明式事务的部分,编程式的事务其实也差不多,所以就不提了。

    首先是对声明的事务的一些属性进行存储,在spring里,有一个类来专门存储这些属性,就是TransactionAttributeSource ,这个类的创建在tx标签的handler是可以看到的。

    后续对于@Transactional的解析和前面分析过的无数的注解的生效一毛一样,都是通过一个beanPostProcessor,然后在解析到希望的注解后,给这个对象生成代理对象返回,过程和aop的那套过程是一样的。

    最关键的是在生成代理是使用到的advisor,在看tx标签的handler的时候,可以看到有俩个关键的类的注入,TransactionInterceptoer和BeanFactoryTransactionAttributeSourceAdvisor. 在BeanFactoryTransactionAttributeSourceAdvisor类里,可以看到pointCut对类进行匹配的操作。在TransactionInterceptoer里可以看到方法前后,加入的事务相关的一系列代码。具体的逻辑就不多说了,无非还是上面说的那样,在方法开始前begin,在方法后进行commit或者回滚。不过因为要考虑嵌套事务,还有不同数据源的一些差异性,逻辑稍微有点复杂,可以在需要的时候自己看下。

    另外就是,每中数据源都有自己的transactionManager,里面具体实现了beigin,commit,roback的逻辑,但是貌似是不支持多数据源混合操作的情况的。

    Ok,就简要的记录下。

  • 相关阅读:
    Docker找不到私有nuget服务
    EF中字符串转数字排序
    一个简单的注册页面
    【转】【数据库SQL】SQL查询和替换含有回车,空格,TAB,等
    RGB颜色记录
    javascript中event.keycode
    java基础总结
    面试干货
    jQuery、实例大全
    使用Sql按日期条件查询
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/9019939.html
Copyright © 2011-2022 走看看