异步作业,例如来自网站的下载分数,或在完成某些关键任务后发送电子邮件。 当我们下载一些分数时,我们必须等待当前页面才能获得响应页面或下载文件。 有没有可能我可以点击下载分数,它发生在后台,以便我可以导航到其他部分 的网站,并在平均时间检查工作的状态。或者在将来安排一些工作并获得执行结果 通过电子邮件。
我们的是带有Hibernate 3.5 ORM的struts 2 webapplication。浏览了一些java调度库后,得到了一些关于Quartz的信息。 但Quartz是否适合上述要求或我可以尝试的任何其他库? 请指导我正确的方向。
答案 0 :(得分:7)
您需要某种异步处理支持。您可以使用:
quartz-scheduler - 此库非常全面,可让您安排各种工作。如果您只想使用 来在后台安排作业并立即运行它们,可能会出现问题
使用线程池,请参阅Executors
class
@Async
/ @Asynchronous
支持
然后你以某种方式恢复结果。取决于您是想直接在浏览器中还是通过电子邮件发送它们:
答案 1 :(得分:1)
Quartz当然是一种方法 - 如果你想安排一个特定时间或特定频率的作业,那么效果很好。
如果您只是想在后台启动某些操作以响应用户操作,并检查其状态,还有其他一些方法可以更好地适应此模式:
java.util.concurrent包:您可以设置ThreadPoolExecutor并向其提交实现Callable
的任务。您将获得一个Future<T>
对象,您可以检查其完成情况(isDone
),并在完成后获取结果(get
)。
使用EJB或Spring,还有一个(会话)bean方法的概念是@Async
或@Asynchronous
,它返回Future<T>
并且行为与上面一样。基本上,这只是从代码中抽象出线程池创建和管理,并将其移动到容器或框架中。