使用grails应用程序中的后台线程在mysql数据库中插入数据

时间:2014-02-07 21:40:50

标签: multithreading spring grails asynchronous

嗨我有grails web应用程序,用户可以通过从excel或csv文件导入数据来保存数据,我的应用程序解析数据并将其保存在数据库中,但如果有太多记录如40,000则需要更多时间。

所以我想做的是在后台运行此任务,并在通过电子邮件完成任务后通知用户,这样用户就不必理想地坐在那里,可以处理其他任务。

您能否建议我使用后台线程将记录保存在数据库中

2 个答案:

答案 0 :(得分:2)

您可以使用@Async注释在单独的线程中启动长时间运行的任务,请参阅其文档here

  

25.5.2 @Async Annotation

     

可以在方法上提供@Async注释以便调用   该方法将异步发生。换句话说,来电者   将在调用和实际执行时立即返回   该方法将在已提交给Spring的任务中发生   TaskExecutor接口。在最简单的情况下,注释可以应用于a   归还方法。

这是如何使用它的代码示例:

@Async
void doSomething() {
    // this will be executed asynchronously
}

要为批处理提供类似结构的ETL(提取转换加载),请查看弹簧批处理。这是一个如何读取CSV并使用spring batch CSV File Upload将其上传到数据库的示例。

答案 1 :(得分:0)

您可以使用 Quartz插件,然后创建一个按需运行的作业,并在不阻止用户的情况下为您插入。链接到插件:http://grails.org/plugin/quartz