【发布时间】:2021-09-16 21:49:29
【问题描述】:
我有一个 Spring Batch 应用程序,它运行 1 个作业和 1 个步骤(执行一些读取、处理和写入数据库的步骤)。 JobParameters 是文件名(CSV 的)和 AWS 区域(Spring Batch 作业在 CSV 加载到 AWS S3 存储桶时启动)。问题是另一个团队每晚触发批处理作业(使用脚本将 CSV 加载到 S3 存储桶),这会启动作业(从 CSV 读取数据)。这最多需要一个小时,并且整个晚上都会重复几次(最多约 7 个作业)。
我知道我可以使用 JobExecutionListener 或 StepExecutioner 侦听器来获取作业/步骤的元数据因为它正在发生,但是但是由于他们正在运行多个作业,我想汇总一个涵盖所有这些作业的报告,并且我可以提供读/写计数、作业和步骤的退出状态。我也希望能够在之后执行此操作,因此我不应该依赖于当前正在运行的 Job/Step,例如 jobExecution/stepExecution 如何在 StepExecutionListeners 中获取它们的数据(据我所知)。
我确实看到了 JobExplorer bean,但是,在从元数据表中获取记录之前,所有方法看起来都需要像 JobId 这样的信息,我没有 strong> 在所有 7 个作业都运行之后,除非我想我把它保存在某个地方。我想我可以创建一些@Entities 来表示元表(batch_job_execution、batch_step_execution 等),然后使用 Jpa 方法通过 JobParameters 来查询它们(我本来可以这样,因为团队加载了 CSV文件将具有该数据,但不是我之前所说的 JobInstanceId)。不过,这似乎有点矫枉过正。
简单地获取一组特定的作业然后从作业中获取过去发生的作业/步骤的步骤数据的最简单方法是什么?通过“过去”,我的意思是,也许我会在我的 Spring Batch 应用程序中创建一个 HTTP 端点,用户可以在其中发布文件名,然后可以在几分钟/几小时/几天后返回相应作业/步骤的所有元数据实际的作业/步骤已完成。
我是否过于复杂了?有没有更简单的方法?
理想情况下,我的“报告”如下所示,如果它是通过我的 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
如您所见,它将是有关特定作业运行的汇总报告。 HTTP 端点可以接受类似这样的 POST 请求:
HTTP POST,http://base-url/getBatchReport
{
"fileNames": [dummyFileName1.csv,
dummyFileName2.csv,
dummyFileName3.csv,
dummyFileName4.csv
],
"mailingList": [johndoe1@gmail.com,
heatherjack@hotmail.com,
mrsmithers@nike.com
]
}
【问题讨论】:
标签: java spring spring-boot spring-batch