zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    selenium 等待时间
    将博客搬至CSDN
    关于科研和工作的几点思考
    窥探观察者模式
    泛型编程拾遗
    【opencv入门篇】 10个程序快速上手opencv【下】
    【opencv入门篇】 10个程序快速上手opencv【上】
    【opencv入门篇】快速在VS上配置opencv
    【MFC系列】MFC快速设置控件文本字体、大小、颜色、背景
    如何用Qt Creator输出helloworld
  • 原文地址:https://www.cnblogs.com/yanan7890/p/7118192.html
Copyright © 2011-2022 走看看