javaweb应用中的异步任务
异步作业,如从网站下载分数,或在完成某些关键任务后发送电子邮件。 现在,当我们下载一些分数时,我们必须在当前页面上等待以获得响应页面或下载文件。 有没有可能,我可以点击下载分数,它发生在后台,以便我可以导航到其他部分 同时检查工作状态。或者在以后安排一些作业,并获得其执行结果 通过电子邮件 我们的是一个带有Hibernate 3.5 ORM的struts 2 Web应用程序。在浏览了一些java调度库之后,获得了一些关于Quartz的信息。 但是Quartz是满足上述要求的正确库还是我可以尝试的任何其他库?javaweb应用中的异步任务,java,asynchronous,quartz-scheduler,jms,mdb,spring,ejb,ajax,comet,Java,Asynchronous,Quartz Scheduler,Jms,Mdb,Spring,Ejb,Ajax,Comet,异步作业,如从网站下载分数,或在完成某些关键任务后发送电子邮件。 现在,当我们下载一些分数时,我们必须在当前页面上等待以获得响应页面或下载文件。 有没有可能,我可以点击下载分数,它发生在后台,以便我可以导航到其他部分 同时检查工作状态。或者在以后安排一些作业,并获得其执行结果 通过电子邮件 我们的是一个带有Hibernate 3.5 ORM的struts 2 Web应用程序。在浏览了一些java调度库之后,获得了一些关于Quartz的信息。 但是Quartz是满足上述要求的正确库还是我可以尝试的
请为我指明正确的方向。Quartz无疑是实现这一点的一种方法,如果您希望将作业安排在特定时间或特定频率运行,它将非常有效 如果您只是想在后台启动某个操作以响应用户操作,并检查其状态,那么有几种其他方法可以更好地适合此模式:
- java.util.concurrent包:您可以设置ThreadPoolExecutor,并向其提交实现可调用的任务。您将返回一个
对象,您可以检查该对象的完成情况(Future
),并在完成时获取其结果(isDone
)get
- 对于EJB或Spring,还有一个(会话)bean方法的概念是
或@Async
,它也返回@Asynchronous
未来的
,其行为如上所述。基本上,这只是从代码中抽象出线程池的创建和管理,并将其移动到容器或框架中
- java.util.concurrent包:您可以设置ThreadPoolExecutor,并向其提交实现可调用的任务。您将返回一个
对象,您可以检查该对象的完成情况(Future
),并在完成时获取其结果(isDone
)get
- 对于EJB或Spring,还有一个(会话)bean方法的概念是
或@Async
,它也返回@Asynchronous
未来的
,其行为如上所述。基本上,这只是从代码中抽象出线程池的创建和管理,并将其移动到容器或框架中
- -此库非常全面,允许您安排各种作业。如果您只想在后台调度作业并立即运行它们,那么这可能是一种过分的做法
- 使用线程池,请参见类
- 队列可以侦听请求并以异步方式处理它们
- 最后,您可以利用或中的
/@Async
支持@Asynchronous
- 每次呈现页面时,请检查是否没有任何已完成/正在进行的作业。如果有一些已完成的作业,请在页面的某个位置显示一个额外的链接(类似于通知)。如果作业正在进行,请启动请求并每隔一秒钟询问一次,或使用长轮询/立即接收结果
- 如果要通过电子邮件发送结果,只需在作业完成后发送即可。更简单但不那么友好的IMHO
- -此库非常全面,允许您安排各种作业。如果您只想在后台调度作业并立即运行它们,那么这可能是一种过分的做法
- 使用线程池,请参见类
- 队列可以侦听请求并以异步方式处理它们
- 最后,您可以利用或中的
/@Async
支持@Asynchronous
- 每次呈现页面时,请检查是否没有任何已完成/正在进行的作业。如果有一些已完成的作业,请在页面的某个位置显示一个额外的链接(类似于通知)。如果作业正在进行,请启动请求并每隔一秒钟询问一次,或使用长轮询/立即接收结果
- 如果要通过电子邮件发送结果,只需在作业完成后发送即可。更简单但不那么友好的IMHO
- 您需要某种异步处理支持。您可以使用:
- 您需要某种异步处理支持。您可以使用: