各位大神,我们系统遇到了一个很有挑战性的问题,就是在事务提交的时候报这个异常信息:org.springframework.transaction.TransactionSystemException: Could not commit JDBC transaction; nested exception is java.sql.SQLException: Can't call commit when autocommit=true ,之前还好好的,可是今天就一直出现了,希望大神们给一些好的建议,感激不尽。

解决方案 »

  1.   

    没遇到过这种情况.看一下你spring的配置,如果你昨天还是好好,今天什么都没做,突然不能用了,你刷新一下项目缓存,或者在配置文件中,随便加点东西,再删掉.再试试
      

  2.   

    因为数据库设置了autocommit,能跟事务冲突。把autocommit false
      

  3.   

    LZ用的mysql?mysql事务默认是自动提交的。
      

  4.   

    JDBC中默认autocommit为true 即对于Connection对象产生的Statement对象(PreparedStatement) 对数据库提交的任何一条SQL都会立刻生效。
    在JDBC中处理处理步骤主要有三步
    1.Connection对象setAutoCommit(false)关闭自动提交模式 2.Connection对象调用commit()处理事务 3.Connection对象调用roolback()进行回滚
    回到你的问题:Can't call commit when autocommit=true 说明启动了自动提交模式,这种情况下肯定是不能进行事务的,见上述事务处理步骤1。
    解决方法:
    在IDE中Clean项目  如果是在 eclipse中的话  则是Project->Clean
    若Clean大法不行的话肯定是你配置有问题,要看你用的是哪种配置方式,网上找找标准的配置,逐一比对。
      

  5.   

    各位高手,我们用的是mysql,后台框架用的是mybatis与spring,目前代码是用spring控制的事务,然后这是线上生产环境出现的问题,近段出现的很频繁,异常信息中甚至连查询方法也报了这个错。
      

  6.   

    catch一下就好
      

  7.   

    个人建议你搜索下你的代码中是否有调用setAutoCommit这个方法,但spring开启事务的时候会修改setAutoCommit(false);从你描述来看,也不是必现的,可以先检查代码是否有人做坏事,其次检查数据源是用的哪个库,百度下是否存在bug
      

  8.   

    既然是spring托管事务,那么只好检查代码,有没有对事务的多余操作。