当前位置: 首页 > 知识库问答 >
问题:

Srping批处理--从过去运行的多个作业/步骤中获取聚合数据(读、写、步骤退出状态、作业退出状态)的最简单方法

乐正峰
2023-03-14

什么是最简单的方法来简单地获取一组特定的作业,然后从该作业中获取过去发生的作业/步骤的步骤数据?我所说的“过去”是指,也许我会在Spring Batch应用程序中创建一个HTTPendpoint,用户可以在其中发布文件名,然后在实际作业/步骤完成后的几分钟/几小时/几天内返回相应作业/步骤的所有元数据。

我是不是太复杂了?有更简单的方法吗?

理想情况下,我的“报告”类似于下面的内容,如果它是通过我的Spring Batch应用程序中的HTTP控制器触发的,那么我还可以使用JavaMail或JakartaMail向用户发送这些数据是否成功加载:

mailSubject: BATCH JOB 07/06/2021 04:07:50 completed with STATUS {exitCode=COMPLETED}

mailBody:
job [myCustomSpringBatchJob] with step [myCustomSpringBatchStep] for fileName [dummyFileName1.csv] completed with STATUS [COMPLETED] read 320,343 / write 320,343

job [myCustomSpringBatchJob] with step [myCustomSpringBatchStep] for fileName [dummyFileName2.csv] completed with STATUS [EXECUTING] read 20,343 / write 400,343

job [myCustomSpringBatchJob] with step [myCustomSpringBatchStep] for fileName [dummyFileName3.csv] completed with STATUS [FAILED] read 23 / write 24

job [myCustomSpringBatchJob] with step [myCustomSpringBatchStep] for fileName [dummyFileName4.csv] completed with STATUS [COMPLETED] read 200,778 / write 200,778
{
    "fileNames": [dummyFileName1.csv,
             dummyFileName2.csv,
             dummyFileName3.csv,
             dummyFileName4.csv
       ],
    "mailingList": [johndoe1@gmail.com,
             heatherjack@hotmail.com,
             mrsmithers@nike.com
             ]                   
}

共有1个答案

宋岳
2023-03-14

我确实看到了JobExplorer bean,但是,在从元数据表中获取记录之前,所有的方法看起来都需要有JobId之类的信息

JobExplorer#GetJobInstances接受一个作业名(和一个计数),并提供与作业对应的作业实例。在您的情况下,可以执行如下操作:

List<JobInstance> jobInstances = jobExplorer.getJobInstances("myCustomSpringBatchJob", 0, 10);

这将给出您要查找的作业实例(如果region是标识作业参数,则每个文件和/或每个区域有一个作业实例)。从那里,您可以通过查看作业实例的参数、执行时间等来筛选它们,并深入到作业执行和步骤执行,以创建聚合报告。

 类似资料:
  • 我最近使用。我对DB表进行了必要的更改,并对一些与参数API相关的微小代码进行了更改。 现在,当我运行应用程序时,它正在工作,但是如果一个步骤的退出状态为失败,则作业的存在状态设置为完成。这会导致一些问题,因为我们的应用程序代码将其视为成功执行。我通过在中添加一个代码片段来解决这个问题,在这里我检查列表并手动设置作业退出状态,但是Spring批处理框架不应该处理退出状态吗?

  • null 鉴于以下MVE: 执行代码时,“Continue”流运行良好,但“Completed”流总是以失败的作业状态退出。 如何使作业在状态已完成的情况下完成?换句话说,我在流的编码上做错了什么?

  • 我正在尝试在Spring批处理中并行运行多个作业。在谷歌上搜索了很多之后,我遇到了JobStep。有没有人使用过JobStep可以解释如何使用它来并行运行作业,或者有没有其他方法可以并行运行2个独立的作业,即当我启动批处理时,2个作业应该开始并行运行。我的要求就像 当我的应用程序启动时,两个作业都应该开始运行。使用spring batch是否可以这样做 编辑:我甚至试过这种方法 我面临着例外。sp

  • 你可以点击 “设置任务计划”来为一个批处理作业设置计划和点击 “删除任务计划”来移除计划。 如果你在“常规”选项卡选择“不管用户是否登录都要运行”,当你保存计划时你必须在 Windows 计划程序提供你的操作系统用户密码。 【注意】请在设置计划之前保存批处理作业。在运行计划之前,在连接窗口内的密码必须保存。

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以双击或拖放工作来将工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除工作,请以相同的方式移除它们。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可使用 “上移”或 “下移”按钮。 如果你想备份整个服务器,

  • 你可以点击 来为一个批处理作业设置计划和点击 来移除计划。 “小时”和“分钟”字段必需指定。如果字段没有任何值,将会使用全部值。例如,如果“星期”字段是空的,系统会视为这个字段被输入“0, 1, 2, 3, 4, 5, 6”。使用逗号以分隔值。例如,0, 1, 3, 6。使用连字号 (-),不含空格以指示值。例如,0-4。 例子:批处理作业将会在每个工作日下午 6:30 运行。 【注意】请在设置计