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>

  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/yanan7890/p/7118192.html
Copyright © 2011-2022 走看看