我正在运行grails1.3.7,并使用grails数据库迁移插件版本数据库-迁移-1.0
我的问题是,我有一个迁移更改集。这是从表中取出气泡并将其写入磁盘。但是,当我运行这个迁移时,堆空间已经用完了。我在想,我需要刷新和清除会话,以腾出一些空间,但是在迁移过程中,我很难访问会话。顺便说一句,它在迁移中的原因是我们不再将文件存储在oracle中并将它们放到磁盘上
我试过了
SessionFactoryUtils.getSession(sessionFactory, true)我也试过
SecurityRequestHolder.request.getSession(false) //request in null -> not surprisingchangeSet(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
}
}
}任何帮助都将不胜感激.
发布于 2012-12-14 17:13:20
要访问会话,可以使用withSession闭包如下所示:
Book.withSession { session ->
session.clear()
}但是,这可能不是您的应用程序耗尽堆空间的原因。如果数据量很大,那么
def fileIds = sql.rows("""SELECT id FROM erp_file""")
for (row in fileIds) {
..........
} 会消耗掉你的空间。尝试使用分页方式处理数据。不要一次加载所有数据。
https://stackoverflow.com/questions/13882761
复制相似问题