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。
- 我可以使用 Java 的执行程序之一(例如
ExecutorService
/NewFixedThreadPool
)从控制器方法执行 Runnable
任务,以便 return 在任务异步进行时立即从方法?
- 如何确保执行程序与 Web 应用程序一起正常关闭?
- 是否有一个基于 Spring 的执行器我可以使用它以某种方式访问所有自动连接的依赖项,而不是我创建对它们的
final
引用?
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 注释。
我正在 Servlet 2.5 (Tomcat) 环境中 Java 6 JVM 运行ning 上开发 Spring MVC 应用程序。我需要开发一个控制器方法来执行一项长时间的 运行ning 任务(大型数据库查询、生成报告并向用户发送电子邮件)。有理由地,我希望任务异步 运行 。当我四处搜索时,我发现很多文章都是基于我的环境不支持的 Servlet 3 和 AsyncTask。
- 我可以使用 Java 的执行程序之一(例如
ExecutorService
/NewFixedThreadPool
)从控制器方法执行Runnable
任务,以便 return 在任务异步进行时立即从方法? - 如何确保执行程序与 Web 应用程序一起正常关闭?
- 是否有一个基于 Spring 的执行器我可以使用它以某种方式访问所有自动连接的依赖项,而不是我创建对它们的
final
引用?
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 注释。