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



我正在运行 grails 1.3.7 并使用 grails 数据库迁移插件版本 database-migration-1.0

遇到的问题是我有一个迁移更改集。 这是从表中提取 blob 并将它们写入磁盘。 在运行此迁移时,尽管我的堆空间不足。 我想我需要刷新并清除会话以释放一些空间,但是我很难从迁移中访问会话。顺便说一句,它在迁移中的原因是我们正在摆脱将文件存储在 oracle 中并将它们放在磁盘上

我试过了

SessionFactoryUtils.getSession(sessionFactory, true)

我也试过

SecurityRequestHolder.request.getSession(false)   //request in null -> not surprising

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
        }
    }
}

任何帮助将不胜感激。

应用程序上下文将在迁移中自动提供,ctx 。 您可以像这样获得会话:

def session = ctx.sessionFactory.currentSession

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

Book.withSession { session ->
    session.clear()
}

但是,这可能不是应用堆空间不足的原因。如果数据量很大,则

 def fileIds = sql.rows("""SELECT id FROM erp_file""")
    for (row in fileIds) {
        ..........
    } 

会占用您的空间。尝试使用分页处理数据。不要一次加载所有数据。

最新更新