0

私は grails 1.3.7 を実行しており、grails データベース移行プラグイン バージョン database-migration-1.0 を使用しています。

私が抱えている問題は、移行変更セットがあることです。つまり、テーブルから BLOB を取り出してディスクに書き込みます。この移行を実行すると、ヒープ領域が不足します。スペースを解放するためにセッションをフラッシュしてクリアする必要があると考えていましたが、移行内からセッションにアクセスするのが困難です。ところで、移行中の理由は、ファイルをオラクルに保存してディスクに配置することから離れているためです

私が試してみました

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

どんな助けでも大歓迎です。

4

2 に答える 2

1

アプリケーション コンテキストは、移行時に として自動的に利用可能になりますctx。次のようにセッションを取得できます。

def session = ctx.sessionFactory.currentSession
于 2012-12-14T16:56:10.467 に答える
0

セッションにアクセスするには、次のように withSession クロージャーを使用できます。

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

ただし、これがアプリのヒープ領域が不足する理由ではない場合があります。データ量が多い場合は、

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

あなたのスペースを消費します。ページネーションでデータを処理してみてください。一度にすべてのデータをロードしないでください。

于 2012-12-14T17:13:20.177 に答える