无法增加Grails事务的超时(MyBatis)

时间:2016-04-06 09:21:32

标签: hibernate grails mybatis

使用MyBatis在Grails中执行长时间运行的事务时,我收到数据库超时:java.sql.SQLException: Connection has already been closed.

改进保存过程是不可行的,它通过调用batisGateway.operation(params)中描述的存储过程多达一千次来逐行保存,一段时间后开始缓慢运行,并且可能需要长达45分钟。但是我在大约30分钟后会超时,这让我相信在Grails / MyBatis / Hibernate中设置了一些超时,我需要覆盖它。

  • 我尝试向.withNewTransaction([timeout: 3600]) { ... }添加超时 - 没有效果。
  • 我尝试了DataSource.groovyBootstrap.groovy中的各种参数 - 没有效果
  • 我尝试手动打开会话和交易,如:

    StatelessSession session = sessionFactory.openStatelessSession()
    Transaction transaction = session.getTransaction()
    transaction.setTimeout(4800)
    transaction.begin()
    ...
    

    但仍无效果。

我的数据库允许无限制超时,因此问题很可能不存在。还有什么我可以尝试的吗?

1 个答案:

答案 0 :(得分:0)

这是因为连接因某种原因被驱逐出去了。请参阅:https://stackoverflow.com/questions/36449198/grails-evicts-active-transaction