我当前的框架是SpringMvc+Mysql,没错,当时搭完了说的这是纯SpringMVC,嗯,够纯,实际情况是这样的,当时是我们项目经理的一个朋友来给搭的这个框架(这个人之前也没搭过框架),拿的之前他做的项目把之前的系统的代码删了,只留了一个架子,搭完了,人就走了,起初系统由于好多代码逻辑都是一个表DML,在多个表进行DML的时候考虑加入事务,但是想加的时候才发现之前那人连事务都没弄好就抛给我们用了,没办法,就在网上找的编程式事务。
       当时配置完了,什么Rollback、commit都好用,但是现在有个问题,实际客户用了之后发现好多Mysql报出的死锁(Deadlock found when trying to get lock; try restarting transaction),不知哪位大神能把实际用的事务程序段贴出来,给我参考一下,我现在就知道我大概就是程序上做DML由于未指定主键(Primary)进行操作导致表锁,其他线程想修改的时候就得等待,这个当用户量大的时候肯定有问题。
        各位大神有什么见解,帮助我一下,谢谢大家啦。

解决方案 »

  1.   

    1、提交数量有一天特别大的一天是一个小时一千多次提交,但是只是那一阵,因为那天他们做的活动,导致好多人人都在那个时间提交。
    2、有主键约束,唯一没有。
    3、之前有重复提交现象,后来改成不能重复提交了,但是现在还是偶尔会出现这种情况。       我也意识到了,貌似如果不指定主键的话,数据库就会触发表级锁,这样肯定有问题        我们领导让我确认到底是框架的事,还是数据库的事,如果要是框架问题,可能就要换框架重构代码。
            数据库:我查到了有可能是我对表进行DML时候没有指定主键导致表级锁出现死锁情况
            框架:我想确定就是我代码逻辑有没有问题,我看在事务里查询和正常查询不一样后面有一段后缀for update或者lock in share mode那个。现在我就想找个和我差不多逻辑的,把代码例子贴出来一个给我看看,是不是我写的代码不对了,还有可能是DML语句写的不对了。