使用 Spring 框架的作业状态进度条

Posted

技术标签:

【中文标题】使用 Spring 框架的作业状态进度条【英文标题】:Job status progress bar with Spring framework 【发布时间】:2016-03-14 10:42:04 【问题描述】:

在一个 Web 应用程序中,我想显示一个长的服务器端作业的进度条。 我认为这个过程几乎是标准的:

    客户端通过 Ajax 请求作业 服务器在单独的线程中启动此作业,并向客户端回复该作业已启动。 客户端以固定的时间间隔启动状态请求 服务器回复状态请求查询作业线程,获取状态(作业运行/完成/错误)。如果是跑步,请说明完成百分比。

在 Spring 框架中有没有为此目的的东西?

【问题讨论】:

两票无评论... 请阅读***.com/help/how-to-ask - 这个问题要么太宽泛(回答涉及应用程序特定的客户端和服务器代码,这可能是基于意见而不是确定性的),要么似乎属于“推荐库”建议 Spring 可能会解决您的问题(我不相信它会)。鉴于您已经掌握了这将如何工作的基础知识(尽管您应该使用应用程序服务器而不是在 Web 服务器和 Web 套接字中生成线程而不是使用 AJAX 轮询),您应该尝试实现一些东西并返回特定问题。 我不同意你的看法。我在问一个特定的知名框架(Spring)是否有用于特定目的的东西,这不能与“推荐库”混淆,因为我正在声明库。我不是在问代码,而是在问这个框架是否正在考虑这种模式。此外,如果没有来自客户端的线程和状态轮询,我无法理解这种情况如何工作,但这可能是我的不足。我认为具有 mvc 框架的 Web 服务器可以是应用程序服务器。我错了吗? 这个场景需要线程,只是你不应该创建线程(当然也不应该在网络服务器中 - 在网络服务器中做额外的工作会限制它完成工作的能力 - 响应到http请求)。我希望使用消息驱动的 Bean;您发布一条消息以响应 HTTP 请求,当 MDB 有足够的资源时会处理该请求,并在运行时发布状态消息。状态消息应通过 web-socket 推送到客户端浏览器以避免轮询。 对于“线程”,我不是指接收 http 消息的 Web 服务器线程,而是指服务 java 线程以异步方式运行由Executors.newSingleThreadExecutor(); 生成的作业,并从弹簧控制器中调用Apache Tomcat 容器。我将研究 web-sockets,因为 http 请求是我所知道的从客户端到服务器的唯一通信。衷心感谢。 【参考方案1】:

您询问的进度条主要用于上传和下载大文件,您可以在其中轻松计算已下载或上传的文件大小与原始文件大小相反,通常使用脚本完成,Spring不支持这样的进度条功能。

【讨论】:

谢谢,我的问题与数据传输有点不同,因为无法从客户端计算此远程作业的进度(如上传/下载)。 我在 Spring 上工作过,从来没有发现过这样的东西,当我需要进度时,我使用了 javascript 当然我会使用Javascript来显示和管理进度条,但是进度数据(状态和完成百分比)由服务器给出。

以上是关于使用 Spring 框架的作业状态进度条的主要内容,如果未能解决你的问题,请参考以下文章

Spring JMS ActiveMQ 跟踪作业状态

Spring Batch 作业状态未在数据库中更新

如何获取具有已完成状态的 Spring Batch 作业的最后执行的开始或结束日期?

如何在状态栏中对齐进度条?

如何使用服务帐户确定 Google BigQuery 作业的状态?

使用 spring 在 Quartz 调度程序中完成作业后插入数据