Grails - 控制器中耗时的处理

时间:2013-07-12 20:00:22

标签: performance grails grails-controller

我目前有一个控制器可以进行一些繁重的处理(批量csv文件处理 - cvs文件,范围从150Mb到400Mb)。 CSV文件上载到临时文件位置。处理由一个服务完成,该服务将文件位置从外部jar传递给API(基本的Java API调用 - 没有Web服务调用或任何东西)。该服务方法需要大约2-3次才能返回,并且用户必须在此时间等待处理完成并在提交表单后加载页面 - 而不是最佳用户体验。

Grails用户遇到过这样的问题,这种问题的最佳解决方案是什么?我是Grails和JavaEE的新手,因此这基本上是一个关于如何构建这样一个系统以及可用于此的库类型的问题。

我已经搜索了相当多的内容。人们已经用JMS,RabbitMQ等作为类似问题的解决方案。但是这些似乎是用一种火箭筒的方式交换一只苍蝇来解决我的小脑。非常感谢您的建议。

谢谢。

2 个答案:

答案 0 :(得分:1)

如果希望在不同的线程中执行该方法,可以在服务方法上使用Spring @Async注释。这是我在Grails应用程序中采用的方法,它很容易。

这里有一个如何设置它的例子: http://tux2323.blogspot.co.uk/2012/05/grails-and-spring-async-annotation.html?m=1

答案 1 :(得分:0)

使用quartz插件...让控制器安排一个即时作业(调度很快,用户将立即获得响应,并且处理将在一个石英作业中进行,该作业在不同的线程)。只需在完成所有工作后通知用户(发送电子邮件或其他任何内容)。

或者,使用executor插件在新线程中启动作业。 2.3将有Async Support这可以帮助到这里。