【问题标题】:Query batch job metadata in Spring batch在 Spring 批处理中查询批处理作业元数据
【发布时间】:2015-10-15 08:35:45
【问题描述】:

我想从与 BATCH_JOB_INSTANCE 表连接的 BATCH_JOB_EXECUTION 表中获取 10 条最新记录。

那么我怎样才能访问这些表呢?

在这个应用程序中,我使用了 Spring Data JPA。这是另一个使用 Spring Batch 并创建这些表的应用程序。换句话说,我只想运行一个 JOIN 查询并将其直接映射到我的自定义对象,其中只包含必要的字段。尽可能地,我想避免为这两个表制作单独的模型。但我不知道这里的最佳方法。

【问题讨论】:

    标签: java spring spring-batch spring-data-jpa


    【解决方案1】:

    如果您想从 Spring Batch 代码中执行此操作,您需要使用 JobExplorer 并在 START_TIMEEND_TIME 上应用过滤器。或者,只需使用 JDBC 将带有所需 JOINSQL 查询发送到数据库。元数据表的DDLs可以在here找到。

    编辑

    如果您想尝试在 SpringBatch 中执行此操作,我想您需要遍历 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,但我没有找到执行该查询的合适方法。但是,JDBC 可能是最简单的方法。谢谢!
    【解决方案2】:

    由于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();
    

    要返回 N 个元素,您可以使用流的其他容量(限制、最大值、收集器...)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 2014-08-10
      • 2018-05-22
      • 2020-08-29
      • 2015-05-23
      • 1970-01-01
      • 2019-11-16
      相关资源
      最近更新 更多