2012-01-29 7 views
3

私はGrailsのrun-scriptを使って実行されている面白いスクリプトを持っています。大量の静的データからデータベースを移入します。 this Grails/Hibernate session issueのために、時々セッションをクリアする必要があります。私がしない場合、アプリがメモリ不足になります。したがって、run-scriptを使用して実行している場合、セッションまたはWebアプリケーションコンテキスト(GrailsWebApplicationContext)への参照を取得するにはどうすればよいですか?実行スクリプトを使用して実行しているときにセッションまたはWebアプリケーションのコンテキストを取得する方法はありますか?

答えて

5

_RunScript.groovyを見ると、アプリケーションのコンテキストとGrailsApplicationオブジェクトがスクリプトのバインディングに挿入されていることがわかります。

def shell = new GroovyShell(classLoader, new Binding(ctx: appCtx, grailsApplication: grailsApp)) 

あなたがそれらを持っていたら、現在のセッションへのアクセスを得ることは簡単です、あなたのスクリプト内だけで現在のセッションのセッションファクトリを聞いて、あなたはそれをクリアすることができますについての

def currentSession = ctx.sessionFactory.currentSession 
currentSession.clear() 
+0

グレート説明'ctx'がどのように注入されるのか。 –

+0

ここでの答えは、run-scriptsコマンドを使ってGrailsのアプリケーションコンテキストで実行されるGroovyスクリプトです。いくつかのサイトは、 'includeTargets << grailsS​​cript(" ... ")'を使って参照していますが、答えに記載されているように、実行スクリプトには必要ありません。あなたのスクリプトに '@ Field'を定義するときに' ctx'にアクセスしようとすると、あなたを捨ててしまうかもしれません。 '@ Field'宣言が評価された時点で、' ctx'バインディングはまだ発生していません。 '@ Fields'で代入を' 'ctx''を参照することを別の行に定義するだけで済ませればうまくいきます。 –

関連する問題