在Grails环境下运行脚本文件时如何获取hibernate Session或者app context对象。

本问说明在Grails环境下如何通过在脚本中获取Hibernate Session或者App Content对象。

开发中使用了外部脚本实现数据导入,为了提高导入效率,需要定期清理Session,为了在脚本中获得Hibernate Session,可以在加载脚本文件是对GroovyShell绑定appCtx和grailsApp对象。

def shell = new GroovyShell(classLoader, new Binding(ctx: appCtx, grailsApplication: grailsApp))
这么做以后,就可以在自定义脚本中访问session factory并清理当前session:
def currentSession = ctx.sessionFactory.currentSession
currentSession.clear()

参考:
http://stackoverflow.com/questions/9050639/how-to-get-the-session-or-web-application-context-when-running-via-run-script
http://naleid.com/blog/2009/10/01/batch-import-performance-with-grails-and-mysql/