当前位置: 首页 > news >正文

屯昌网站建设wap网站搭建

屯昌网站建设,wap网站搭建,阿里巴巴域名,文字设计图片在线生成一、问题描述场景描述#xff1a;有这样一个service方法#xff0c;调用了两个dao中的方法。第一个方法按照传入的id批量更新用户名。第二个dao方法无数据库操作#xff0c;仅仅抛出一个RuntimeException.这个service方法通过xml配置由spring事务管理的。两个DAO类中分别有S…一、问题描述场景描述有这样一个service方法调用了两个dao中的方法。第一个方法按照传入的id批量更新用户名。第二个dao方法无数据库操作仅仅抛出一个RuntimeException.这个service方法通过xml配置由spring事务管理的。两个DAO类中分别有SqlSessionTemplate类型的属性template使用IOC的方式注入的。public void batchUpdate() {String usernamenewname59;List idListArrays.asList(10000,10001);userDao.batchUpdateUsername(username, idList);testDao.testException();userDao.batchUpdateUserage(55, idList);testDao.testNormal();}当userDao及testDao中注入的是ExcutorType.Simple类型的template时批量更新用户名的操作会回滚。当userDao及testDao中注入的是ExcutorType.Batch类型的template时批量更新用户名的操作未回滚。经过检查数据库日志发现第二种情况的数据库执行序列如下1 set autocommit 02 rollback3 update t_user set usernamenewname59 where id 100004 update t_user set usernamenewname59 where id 100015 set autocommit 1更新操作在回滚之后执行故回滚失败。调试源代码发现有如下序列AbstractPlatformTransactionManagerprocessRollback () -- triggerAfterCompletion() -- invokeAfterCompletion()--TransactionSynchronizationUtilsinvokeAfterCompletion()--SqlSessionUtilsafterCompletion()--DefaultSqlSessionclose()--BaseExecutorclose() -- rollback() -- flushStatement()--BatchExecutordoFlushStatements()这时就执行了sql语句。简单来说抛出异常spring事务回滚清理资源关闭sqlSession.mybatis关闭sqlsession,关闭前先flushStatements执行未执行的sql语句然后再rollback.但是这个rollback方法里判断connection是受事务管理的就不执行任何操作。public void rollback(boolean required) throws SQLException {if (!closed) {try {clearLocalCache();flushStatements();} finally {if (required) {transaction.rollback();}}}}public void rollback() throws SQLException {if (!this.isConnectionTransactional) {if (this.logger.isDebugEnabled()) {this.logger.debug(Rolling back JDBC Connection [ this.connection ]);}this.connection.rollback();}}二、解决办法1、在自己的应用程序中写个拦截器。在执行完executor的close()之后由这个拦截器再执行一遍connection.rollback()但从代码的可读性来看会非常的差。2、修改mybatis的bug。修改BaseExecutor的rollback()public void rollback(boolean required) throws SQLException {if (!closed) {try {clearLocalCache();if (!required) {flushStatements();}} finally {if (required) {transaction.rollback();}}}}不知道大家有没有碰到过类似的问题又是通过什么方案解决的呢
http://www.zqtcl.cn/news/383045/

相关文章:

  • 毕设做音乐网站重庆正云环境网页制作
  • 免费网站建站w深圳罗湖建网站
  • 创建一个网站一般步骤有哪些互动网站策划
  • 文化传媒 网站设计宿迁网站建设价格
  • 网站开发五人分工是网站推广的案例
  • 海外网站制作seo技术
  • 包头网站建设熊掌号免费行情100个软件
  • 江门网站制作维护电子商务网站运营与管理
  • 动画网页制作网站常用的网络推广方法有
  • 一个设计网站多少钱sku电商是什么意思
  • 做网站优化有前景吗emlog和wordpress
  • 30天网站建设实录 pdf货源网站程序
  • 做企业网站需要多久培训机构 网站建设
  • 商业网站初期建设资金预算哈尔滨视频制作公司
  • 网站建设教程网哪个好wordpress 侧边栏 固定
  • 对网站主要功能界面进行赏析软件开发和app开发的区别
  • 西安市高陵区建设局网站如何重新安装电脑上的wordpress
  • 合肥网站快速优化排名全球人口多少亿
  • 中山网站关键字优化使用动易模版制作网站
  • 深圳营销网站建设报价广西住房建设厅网站
  • 爱站网appwordpress图片500
  • 北京网站排名制作图片点击就能跳转网站怎么做的
  • dw网站建设的数据库网站建设托管pfthost
  • 牛商网做网站成品网站1688入口
  • 涿鹿县建设局网站网络营销的定义和特点
  • 网站建设朋友圈怎么写深圳宝安区松岗
  • 苏州网站的建设哪个网站上做自媒体最好
  • 传送门网站是怎么做的wordpress seo标题
  • 曲靖 曲靖网站建设软件(app)开发视频一页网站怎么做
  • 互联网公司网站建设ppt模板下载wordpress 图片2m