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

Spring MVC controller executes task asynchronously in Servlet 2.5

我正在 Servlet 2.5 (Tomcat) 环境中 Java 6 JVM 运行ning 上开发 Spring MVC 应用程序。我需要开发一个控制器方法来执行一项长时间的 运行ning 任务(大型数据库查询、生成报告并向用户发送电子邮件)。有理由地,我希望任务异步 运行 。当我四处搜索时,我发现很多文章都是基于我的环境不支持的 Servlet 3 和 AsyncTask。

Can I use one of Java's executors (e.g. ExecutorService/NewFixedThreadPool) to execute a Runnable task from the controller method

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

How do I ensure that the executor is shutdown gracefully along with the web application?

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

Is there a Spring based executor I can use that somehow has access to all the auto-wired dependencies

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

Spring 包含您可能想要查看的 @Async 注释。