• springmvc配置文件配置的事务作用范围


      作用于service,不是controller,也不是mapper。所以,要保证原子性,就放在一个serviceimpl里,而不要放在一个controller 里

    第一次与数据库打交道时,事务开启,service层执行完毕后,事务关闭/提交。

    同一个impl里的不同方法,加入先进入A方法,A方法获取DefaultSqlSession,A方法执行完毕释放DefaultSqlSession,B方法执行时获取同一个DefaultSqlSession,同样执行完释放。
    ps:若impl在事务范围内,在closeSqlSession与beforeCompletion之间进行提交(执行beforeCommit:Transaction synchronization committing SqlSession )

    附代码与日志便于读者理解

    上面的大红框依次是:

    下面的大红框依次是:

    可以看到,

    第一个方法执行前:创建sqlsession——注册sessionHolder(DefaultSqlSession)——打开jdbc连接交给spring管理

    第一个方法执行完毕后,释放sqlsession

    第二个方法执行前:从当前的transaction中获取之前释放的sqlsession,(可以看到3和1、2的DefaultSqlSession是同一个),

    第二个方法执行完毕后:关闭sqlsession——事务提交——注销sqlsession——关闭sqlsession

    这已经很明了了,印证了博主上文的叙述。

    ps:这里有个词,sqlsession,那么什么是sqlsession呢?

    session是会话,sqlsession是与数据库的会话。一次会话可以有很多句,即同一个方法里面,可执行多个sql语句。

    PPS:事物管理配置

    <!--事务模板配置 -->
    <tx:advice id="txAdvice" transaction-manager="springTransactionManager">
    <tx:attributes>
    <!-- 以下方法必须在事务内,如果外层已有事务,则使用外层事务,如果没有事务则创建 -->
    <tx:method name="select*" propagation="REQUIRED" read-only="true" />
    <tx:method name="query*" propagation="REQUIRED" read-only="true" />
    <tx:method name="list*" propagation="REQUIRED" read-only="true" />
    <tx:method name="insert*" propagation="REQUIRED"
    rollback-for="java.lang.Exception" />
    <tx:method name="delete*" propagation="REQUIRED"
    rollback-for="java.lang.Exception" />
    <tx:method name="update*" propagation="REQUIRED"
    rollback-for="java.lang.Exception" />
    <tx:method name="do*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
    <!-- 除了上面的操做外,其它方法将不走事物 -->
    <tx:method name="*" propagation="REQUIRED" read-only="true" />
    </tx:attributes>
    </tx:advice>

  • 相关阅读:
    sgu209:Areas(计算几何)
    altium designer电气符号和包的常用元素
    wxWidgets谁刚开始学习指南(5)——使用wxSmith可视化设计
    zoj 3820 Building Fire Stations(二分法+bfs)
    iOS 注册或登录页面(UILable,UITextField,UIButton)
    [ACM] POJ 2689 Prime Distance (筛选范围大素数)
    数字签名和数字证书技术简介(两)
    [Node] Using dotenv to config env variables
    [TypeStyle] Compose CSS classes using TypeStyle
    [Node] Use babel-preset-env with Native Node Features and Also Use Babel Plugins
  • 原文地址:https://www.cnblogs.com/yanan7890/p/7118192.html
Copyright © 2020-2023  润新知