首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spring事宜历险记

2012-08-24 
spring事务历险记前几天经历了一次spring的事务大战,伤透了脑筋,公司一产品发布,在本地开发测试都没有任何

spring事务历险记
   前几天经历了一次spring的事务大战,伤透了脑筋,公司一产品发布,在本地开发测试都没有任何问题,部署到生产服务器,跑了两天,一天早上过来,突然发现,应用访问不了,查日志,发现数据库连接池被耗光,因这套系统原来在windows+tomcat平台已跑了差不多半年多,没有发现问题,这次新发布的应用是部署在linux+weblogic上面,刚开始怀疑是设置的weblogic连接池太小,然后增大了链接池的连接数。一跑,没几分钟,又挂了,这奇了怪了,重启应用,仔细测业务,发现有时候业务跑完了数据并没有真正提交数据库,而且查数据库有锁表的情况,怀疑是事务的问题,但这套系统在另外的平台好好地跑了半年多了,再去测试另外平台的应用,没有任何问题,询问同事,程序代码是否对这个有做一些改动,回答是没有,这就奇怪了。仔细回顾,在原来的平台,用的是第三方的数据库链接池组件,而现在这个应用是用的weblogic的连接池,难道是这个问题?于是乎又切换了链接池,一测,貌似好了,几个人同时测了几笔业务,正常,正在庆幸解决了问题的时候,又有同事说还是有这个问题,我倒!还是没有解决。接着又是切换web容器,又是重启数据库,同样,问题依然存在。
  没办法,只能再去看代码,发现有手动事务与自动事务并存的情况。把手动事务去掉再跑,结果没有任何问题。原来是手动事务的问题?带着怀疑的态度,做了测试,单步跟踪,没有问题呀,手动事务正常。于是乎在工程把手动事务还原再跑,没有任何问题呀,问题不能重现了。这就奇怪了。没办法,只能进行一系列的google动作,关于这个问题,没有找到任何结论。太晕了。不行,只能再次仔细的review代码,一个点一个点地查,一个都不能放过。突然,我发现有一个类的事务处理有问题,在方法入口生成了事务,但是这个方法有很多分支并没有做事务的处理(commit或rollback),找到点了,于是模拟环境一测试,果然,这就是罪魁祸首。
  经历了这么多的波折,几天的折腾,终于解决了这个问题。在这里提醒大家,在用手动事务的时候,千万要注意分支的问题,一定要覆盖全部的分支,否则事务一出问题,整个应用挂了。

热点排行