我想知道如何监控我当前正在运行的批处理作业的状态。我的作业基本上是处理带有一些默认步骤的文件夹,所以我想逐步向用户显示进度。我正在使用Tasklets和DB Job Repository。用一些解释实现这一点的示例代码将更有帮助。
谢谢你。
3 回答
如果您想开发自己的监控应用程序/网页,您可能需要查看JobExplorer
orJobOperator
界面。它为您提供了获取 JobExecutions 的方法,并且在 JobExecutions 中,您可以获取 StepExecutions。所有这些都为您提供了工作的状态和内部的各个步骤。
编辑以回复评论:
对于引用的进度信息,它不是存储在 Spring Batch 中的东西。但是,这两个界面确实可以帮助您。首先将进度信息存储在步骤执行上下文中。然后确保你的 tasklet 没有被实现为同步任务。你必须返回 CONTINUABLE (如果我混淆了这个术语,请原谅我,我以前使用 Spring Batch 已经有一段时间了),这样你的 tasklet 将被 Spring Batch 连续调用。(这可以通过多种方式完成,或者您将工作分成几部分,并且每次调用 tasklet execute(),您只处理其中一个部分并仅在所有部分完成时返回 FINISHED,或者您可以生成另一个线程做这项工作,你的 tasklet 只是监控进度等)。
通过这样做,您将使用进度信息不断更新步骤执行上下文,因此您可以使用 JobExplorer 和 JobOperator 获取 Job Execution -> Step Execution -> Step's Execution Context 以用于进度报告。
你应该看看 spring 批处理管理应用程序。
直接引用:这是一个常规的战争文件。部署后,您可以使用 Web 浏览器(例如 localhost:8080/spring-batch-admin-sample)浏览并查看启动作业和检查作业执行的功能。
当然,通过一些修改,您可以实现自己的要求。
Spring Batch 4.2 版带有基于 Micrometer 的批处理监控和指标捕获。您可以尝试利用它们。下表列出了一些指标
Spring Batch 还使您能够创建自己的指标。您可以在此处查看更多详细信息https://docs.spring.io/spring-batch/4.2.x/reference/html/monitoring-and-metrics.html#custom-metrics