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>
springmvc配置文件配置的事务作用范围的更多相关文章
- annotation配置springMVC的方法了事务不起作用
Spring MVC 和spring context 父子容器关系http://www.121ask.com/thread-5471-1.html 父上下文容器中保存数据源.服务层.DAO层.事务的B ...
- SpringMVC配置文件-web.xml的配置
SpringMVC配置文件(重点) @Web.xml @核心拦截器(必配) <!-- spring 核心转发器,拦截指定目录下的请求,分配到配置的拦截路径下处理 --> <servl ...
- springmvc配置文件web.xml详解各方总结(转载)
Spring分为多个文件进行分别的配置,其中在servlet-name中如果没有指定init-param属性,那么系统自动寻找的spring配置文件为[servlet-name]-servlet.xm ...
- spring+springMVC+JPA配置详解(使用缓存框架ehcache)
SpringMVC是越来越火,自己也弄一个Spring+SpringMVC+JPA的简单框架. 1.搭建环境. 1)下载Spring3.1.2的发布包:Hibernate4.1.7的发布包(没有使用h ...
- Springmvc中配置Quartz使用,实现任务实时调度。
菜鸡的自我修炼,第一次接触quartz,做个记录.-------jstarseven 最近在项目中,第一次在springmvc中配置实用quartz,深刻的感受到quartz带来的方便,顺手做个记录. ...
- springMVC+Hibernate配置
本文描述下 sypro 项目中使用 springMVC+Hibernate配置,初学SpringMVC做下简单整理解. 1.web项目首先我们要使用 web.xml文件将 spring配置引入进来 & ...
- Spring配置文件和SpringMVC配置文件 web.xml配置文件 保存自用
话不多说,最近在周末自己抽时间写一些框架做的系统,当所有东西都需要自己配置时候发现自己压根记不住这么多类和路径,所以日常总结就变得尤为重要了 db-config.properties 将配置文件常量提 ...
- springmvc配置文件web.xml详解各方总结。
Spring分为多个文件进行分别的配置,其中在servlet-name中如果没有指定init-param属性,那么系统自动寻找的spring配置文件为[servlet-name]-servlet.xm ...
- Springmvc配置文件application.xml 和 spring-servlet.xml
文章来源:http://blog.csdn.net/tengdazhang770960436/article/details/48395885 1.SpringMVC 的配置分为两部分 applica ...
随机推荐
- voip技术研究
voip:是一种通过ip现实电话通信的技术统称 sip:voip现在一般都采用sip协议 参考资料: android sip学习 问题: SipManager.newInstance(this)为nu ...
- Jquery ajax异步传值的两个实用的方法,你看后肯定会用第二个
故名思议,你是个asp.net 或者是搞PHP的或者 是javaweb的 ,但是为了提高界面的效率,你必须会实用jquery的ajax,当然,在ajax异步传值的时候很头疼的一件事情就是,拼接字符串 ...
- Java框架之Spring MVC(一)
一.Spring简介 Spring MVC是当前最优秀的 MVC 框架,自从Spring 2.5 版本发布后,由于支持注解配置,易用性有了大幅度的提高.Spring 3.0 更加完善,实现了对 Str ...
- (译)JToken的层次结构
原文地址:https://stackoverflow.com/questions/38558844/jcontainer-jobject-jtoken-and-linq-confusion/3856 ...
- 命令行替代工具 - Cmder配置
Cmder 可搭配使用cmd here ( cmdhere.reg ) 1. 修改config\aliases文件:添加下列几行 l=ls --show-control-chars la=ls - ...
- PE文件详解(五)
在前面几节中经常提到相对虚拟地址RVA,在这篇博客中主要说明这个概念.本来是想接着转载小甲鱼的,但是我自己根据这篇文章和他的视频来学习的时候,发现在RVA与文件的相对偏移地址进行转化的时候,那块我看不 ...
- Ftplib模块的用法
login(user='',passwd='', acct='') 登录到FTP 服务器,所有的参数都是可选的 pwd() 当前工作目录 cwd(path) 把当前工作目录设置为path dir([p ...
- 快速开发基于 HTML5 网络拓扑图应用--入门篇(二)
上一篇我们绘制了一个 graphView 场景,在场景之上通过 graphView.dm() 获取数据容器,并通过 graphView.dm().add() 函数添加了两个 Node 节点,并通过 s ...
- React Native学习(二)—— 开始一个项目
本文基于React Native 0.52 一.创建一个项目 1.初始化一个RN项目 react-native init RNDemo 2.连接一个设备或是打开模拟器 可以通过 adb devices ...
- Java中的集合框架(下)
学生选课--判断Set中课程是否存在 package com.imooc.collection; import java.util.ArrayList; import java.util.Arrays ...