zoukankan      html  css  js  c++  java
  • Spring如何管理事物的?

    Spring如何管理事物的?

    1 spring事务在操作过程中 起初会去连接池中获取一个数据库链接
    2获取到了链接之后会修改数据库的提交方式为手动提交,我们都知道mysql与oracle的事务隔离级别不同,提交的方式也不同,mysql你执行一条语句它自动帮你commit了,所以要修改为手动提交,

    默认的:
    begin
    select 列1,列2,from 表明
    commit:
    end
    修改之后的:
    begin
    select 列1,列2,from 表明
    select ....多条sql执行但未提交

    我们可以看到,在修改之后的代码当中,我们并没有提交commit,所以可以进行回滚操作,
    当我们执行逻辑成功之后,程序执行commit操作,
    3以上操作配合着spring动态代理对象中实现即可完成。

    为什么同样的资源你的经理能写500并发你只能写200个?

    首先我们需要了解一下编程式事物与声明试事物有什么区别?

    一 声明试事物

    声明试事物就只能加在方法上,在方法上增加了声明试事物之后该方法就拥有了事物的 原子性,
    方法内部出现错误全部回滚,执行成功则全部提交,但是 该事物性能太差 如果你调用第三方服务处理其他逻辑,当前事物会一直在等待
    那么你的数据库链接资源不会被释放掉,别人也不会get到你的数据库链接资源
    如果有很多个这样的请求你的数据库连接池资源将全部被消耗掉
    二 编程式事物
    可以在方法内部中使用,可以把方法内部的代码 按照逻辑分成单元提交,如果你去调用第三方服务处理其他逻辑,可以先把之间的单元提交让数据库链接资源释放掉,这样其他请求就可以迅速get到资源事物,
    但是你要考虑的是,该事物的缺点是如果出现错误将需要人手动修补数据,所以每个单元的操作必须记录相应的日志并且整体记录状态,
    事物总结:
    1两个事物操作的粒度不一样,应用场景不一样,编程式事物可以迅速的处理完成并释放资源,在同样的资源下实现了高可用高并发,效率会比声明试事物快N多倍,

  • 相关阅读:
    下载视频
    009 逻辑 + MFC CString
    008 浅拷贝与深拷贝
    007 operator
    006 this指针原理
    005 逻辑 + STL list
    004 list::sort
    003 逻辑 + mfc CList
    001 C++历史和思想
    并查集模板
  • 原文地址:https://www.cnblogs.com/langjunnan/p/12597309.html
Copyright © 2011-2022 走看看