Spring MVC控制器在Servlet 2.5中异步执行任务

时间:2015-03-04 21:25:25

标签: java spring-mvc asynchronous concurrency runnable

我正在使用在Servlet 2.5(Tomcat)环境中运行的Java 6 JVM上的Spring MVC应用程序。我需要开发一个控制器方法,它将执行长时间运行的任务(大型数据库查询,生成报告并向用户发送电子邮件)。理所当然,我希望任务以异步方式运行。当我四处搜索时,我发现了许多基于Servlet 3和AsyncTask的文章,我理解这些文章不受我的环境支持。

  • 我可以使用Java的执行程序之一(例如ExecutorService / NewFixedThreadPool)从控制器方法执行Runnable任务,以便在任务完成时立即从方法返回异步进展?
  • 如何确保执行程序与Web应用程序一起正常关闭?
  • 我是否可以使用基于Spring的执行程序以某种方式访问​​所有自动连接的依赖项,而不是创建final对它们的引用?

2 个答案:

答案 0 :(得分:1)

  

我可以使用Java的执行程序之一(例如ExecutorService / NewFixedThreadPool)从控制器方法执行Runnable任务

是的,你可以。但是既然你正在使用Spring MVC,你可以简单地使用它的asynchronous method support

  

如何确保执行程序与Web应用程序一起正常关闭?

您可以注册一个ServletContextListener,用于在销毁应用程序时关闭池。但是如果你使用Spring的Async支持,它将在上下文被破坏时自动销毁相关的执行器。

  

是否有基于Spring的执行程序,我可以使用它以某种方式访问​​所有自动连接的依赖项

异步方法是Spring bean方法,可以访问它们所属的bean的自动连接依赖项。

答案 1 :(得分:1)

Spring有你可能想要查看的@Async注释。