首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails数据库迁移插件- Java堆空间

Grails数据库迁移插件- Java堆空间
EN

Stack Overflow用户
提问于 2012-12-14 16:38:18
回答 1查看 247关注 0票数 0

我正在运行grails1.3.7,并使用grails数据库迁移插件版本数据库-迁移-1.0

我的问题是,我有一个迁移更改集。这是从表中取出气泡并将其写入磁盘。但是,当我运行这个迁移时,堆空间已经用完了。我在想,我需要刷新和清除会话,以腾出一些空间,但是在迁移过程中,我很难访问会话。顺便说一句,它在迁移中的原因是我们不再将文件存储在oracle中并将它们放到磁盘上

我试过了

代码语言:javascript
复制
SessionFactoryUtils.getSession(sessionFactory, true)

我也试过

代码语言:javascript
复制
SecurityRequestHolder.request.getSession(false)   //request in null -> not surprising

代码语言:javascript
复制
changeSet(author: "userone", id: "saveFilesToDisk-1") {
    grailsChange{
        change{
            def fileIds = sql.rows("""SELECT id FROM erp_file""")
            for (row in fileIds) {
                def erpFile = ErpFile.get(row.id)
                erpFile.writeToDisk()
                session.flush()
                session.clear()
                propertyInstanceMap.get().clear()
            }
            ConfigurationHolder.config.erp.ErpFile.persistenceMode = previousMode
        }
    }
}

任何帮助都将不胜感激.

EN

回答 1

Stack Overflow用户

发布于 2012-12-14 17:13:20

要访问会话,可以使用withSession闭包如下所示:

代码语言:javascript
复制
Book.withSession { session ->
    session.clear()
}

但是,这可能不是您的应用程序耗尽堆空间的原因。如果数据量很大,那么

代码语言:javascript
复制
 def fileIds = sql.rows("""SELECT id FROM erp_file""")
    for (row in fileIds) {
        ..........
    } 

会消耗掉你的空间。尝试使用分页方式处理数据。不要一次加载所有数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13882761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档