我正在使用在Servlet 2.5(Tomcat)环境中运行的Java 6 JVM上的Spring MVC应用程序。我需要开发一个控制器方法,它将执行长时间运行的任务(大型数据库查询,生成报告并向用户发送电子邮件)。理所当然,我希望任务以异步方式运行。当我四处搜索时,我发现了许多基于Servlet 3和AsyncTask的文章,我理解这些文章不受我的环境支持。
ExecutorService
/ NewFixedThreadPool
)从控制器方法执行Runnable
任务,以便在任务完成时立即从方法返回异步进展?final
对它们的引用?答案 0 :(得分:1)
我可以使用Java的执行程序之一(例如ExecutorService / NewFixedThreadPool)从控制器方法执行Runnable任务
是的,你可以。但是既然你正在使用Spring MVC,你可以简单地使用它的asynchronous method support。
如何确保执行程序与Web应用程序一起正常关闭?
您可以注册一个ServletContextListener,用于在销毁应用程序时关闭池。但是如果你使用Spring的Async支持,它将在上下文被破坏时自动销毁相关的执行器。
是否有基于Spring的执行程序,我可以使用它以某种方式访问所有自动连接的依赖项
异步方法是Spring bean方法,可以访问它们所属的bean的自动连接依赖项。
答案 1 :(得分:1)
Spring有你可能想要查看的@Async注释。