Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC控制器在Servlet2.5中异步执行任务_Java_Spring Mvc_Asynchronous_Concurrency_Runnable - Fatal编程技术网

Java SpringMVC控制器在Servlet2.5中异步执行任务

Java SpringMVC控制器在Servlet2.5中异步执行任务,java,spring-mvc,asynchronous,concurrency,runnable,Java,Spring Mvc,Asynchronous,Concurrency,Runnable,我正在Java6JVM上开发一个SpringMVC应用程序,运行在Servlet2.5(Tomcat)环境中。我需要开发一个控制器方法来执行一个长时间运行的任务(大型数据库查询、生成报告和向用户发送电子邮件)。有理由,我希望任务异步运行。当我四处搜索时,我发现了很多基于Servlet3和AsyncTask的文章,我知道我的环境不支持这些文章 我是否可以使用Java的一个执行器(例如,ExecutorService/NewFixedThreadPool)从控制器方法执行Runnable任务,以便

我正在Java6JVM上开发一个SpringMVC应用程序,运行在Servlet2.5(Tomcat)环境中。我需要开发一个控制器方法来执行一个长时间运行的任务(大型数据库查询、生成报告和向用户发送电子邮件)。有理由,我希望任务异步运行。当我四处搜索时,我发现了很多基于Servlet3和AsyncTask的文章,我知道我的环境不支持这些文章

  • 我是否可以使用Java的一个执行器(例如,
    ExecutorService
    /
    NewFixedThreadPool
    )从控制器方法执行
    Runnable
    任务,以便在任务异步进行时立即从方法返回
  • 如何确保executor与web应用程序一起正常关闭
  • 我是否可以使用一个基于Spring的执行器来访问所有自动连接的依赖项,而不是创建对它们的
    最终
    引用
我可以使用Java的一个执行器(例如ExecutorService/NewFixedThreadPool)从controller方法执行可运行任务吗

是的,你可以。但是由于您使用的是SpringMVC,所以您可以简单地使用它的

如何确保executor与web应用程序一起正常关闭

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

是否有一个基于Spring的执行器可以用来访问所有自动连接的依赖项


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

Spring有@Async注释,您可能想查看它。

Nizel,我可以用
@Async
注释任何方法,包括控制器方法吗?看看你提供的链接,看起来是这样,但我想核实一下。特别是因为我使用的是Servlet2.5。我不这么认为,这没有多大意义。您希望同步处理请求并提供同步响应。但是在处理这个请求时,您希望启动一个异步任务,这可以通过调用另一个用
@Async
注释的Springbean方法轻松完成。感谢您的澄清。是的,我是怎么想让请求异步的?!我明天早上第一件事就去看看。