使用MyBatis在Grails中执行长时间运行的事务时,我收到数据库超时:java.sql.SQLException: Connection has already been closed.
改进保存过程是不可行的,它通过调用batisGateway.operation(params)
中描述的存储过程多达一千次来逐行保存,一段时间后开始缓慢运行,并且可能需要长达45分钟。但是我在大约30分钟后会超时,这让我相信在Grails / MyBatis / Hibernate中设置了一些超时,我需要覆盖它。
.withNewTransaction([timeout: 3600]) { ... }
添加超时 - 没有效果。DataSource.groovy
和Bootstrap.groovy
中的各种参数 - 没有效果我尝试手动打开会话和交易,如:
StatelessSession session = sessionFactory.openStatelessSession()
Transaction transaction = session.getTransaction()
transaction.setTimeout(4800)
transaction.begin()
...
但仍无效果。
我的数据库允许无限制超时,因此问题很可能不存在。还有什么我可以尝试的吗?
答案 0 :(得分:0)
这是因为连接因某种原因被驱逐出去了。请参阅:https://stackoverflow.com/questions/36449198/grails-evicts-active-transaction