在 Spring 个批次中查询批处理作业元数据
Query batch job metadata in Spring batch
我想从 BATCH_JOB_EXECUTION-table 中获取 10 条最新记录并加入 BATCH_JOB_INSTANCE-table。
那么我怎样才能访问这些表呢?
在此应用程序中,我使用了 Spring Data JPA。这是另一个使用 Spring Batch 并创建这些表的应用程序。换句话说,我只想 运行 一个 JOIN 查询并将其直接映射到我的自定义对象,只包含必要的字段。我想尽可能避免为两个表制作单独的模型。但我不知道这里最好的方法。
如果您想从 Spring 批处理代码开始,您需要使用 JobExplorer and apply filters on either START_TIME
or END_TIME
. Alternatively, just send an SQL
query with your desired JOIN
to the DB using JDBC. The DDLs
of the metadata tables can be found here.
编辑
如果你想尝试在 Spring 批处理中进行,我想你需要遍历 JobExecutions
并找到你感兴趣的,然后做你的事 )) 某事。喜欢:
List<JobInstance> jobInstances = jobExplorer.getJobInstances(jobName);
for (JobInstance jobInstance : jobInstances) {
List<JobExecution> jobExecutions = jobExplorer.getJobExecutions(jobInstance);
for (JobExecution jobExecution : jobExecutions) {
if (//jobExecution.getWhatever...)) {
// do your thing...
}
}
}
祝你好运!
因为 JobExplorer
不再有接口 .getJobInstances(jobName)
,我已经完成了这个(这个例子以 BatchStatus
作为条件)适应流:
List<JobInstance> lastExecutedJobs = jobExplorer.getJobInstances(jobName, 0, Integer.MAX_VALUE);
Optional<JobExecution> jobExecution = lastExecutedJobs
.stream()
.map(jobExplorer()::getJobExecutions)
.flatMap(jes -> jes.stream())
.filter(je -> BatchStatus.COMPLETED.equals(je.getStatus()))
.findFirst();
对于 return N 个元素,您可以使用流的其他容量(限制、最大值、收集器...)。
我想从 BATCH_JOB_EXECUTION-table 中获取 10 条最新记录并加入 BATCH_JOB_INSTANCE-table。
那么我怎样才能访问这些表呢?
在此应用程序中,我使用了 Spring Data JPA。这是另一个使用 Spring Batch 并创建这些表的应用程序。换句话说,我只想 运行 一个 JOIN 查询并将其直接映射到我的自定义对象,只包含必要的字段。我想尽可能避免为两个表制作单独的模型。但我不知道这里最好的方法。
如果您想从 Spring 批处理代码开始,您需要使用 JobExplorer and apply filters on either START_TIME
or END_TIME
. Alternatively, just send an SQL
query with your desired JOIN
to the DB using JDBC. The DDLs
of the metadata tables can be found here.
编辑
如果你想尝试在 Spring 批处理中进行,我想你需要遍历 JobExecutions
并找到你感兴趣的,然后做你的事 )) 某事。喜欢:
List<JobInstance> jobInstances = jobExplorer.getJobInstances(jobName);
for (JobInstance jobInstance : jobInstances) {
List<JobExecution> jobExecutions = jobExplorer.getJobExecutions(jobInstance);
for (JobExecution jobExecution : jobExecutions) {
if (//jobExecution.getWhatever...)) {
// do your thing...
}
}
}
祝你好运!
因为 JobExplorer
不再有接口 .getJobInstances(jobName)
,我已经完成了这个(这个例子以 BatchStatus
作为条件)适应流:
List<JobInstance> lastExecutedJobs = jobExplorer.getJobInstances(jobName, 0, Integer.MAX_VALUE);
Optional<JobExecution> jobExecution = lastExecutedJobs
.stream()
.map(jobExplorer()::getJobExecutions)
.flatMap(jes -> jes.stream())
.filter(je -> BatchStatus.COMPLETED.equals(je.getStatus()))
.findFirst();
对于 return N 个元素,您可以使用流的其他容量(限制、最大值、收集器...)。