有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获取具有已完成状态的Spring批处理作业最后一次执行的开始或结束日期?

我正在编写一个Spring批处理过程(SpringBoot2.x.x)。作业根据上次更新日期从表中选择一些行-

(select * from tablename where last_upd_dt >= :lastruntime).

:lastruntime是作业最后一次(成功)完成运行的日期。我正在尝试使用JobListener/JobExecutionListener从Listener类中的beforeJob方法获取此日期

有没有办法利用Spring批处理框架提供的类?否则,我将不得不从另一个表中写入和检索此信息


共 (2) 个答案

  1. # 1 楼答案

    您可以使用JobExplorerAPI。它允许您获取作业实例的作业执行情况。一旦获得该结果,就可以根据需要过滤结果,并从JobExecution对象中获取开始/结束日期

  2. # 2 楼答案

    我能够使用JobExplorer API

    private Date fetchPreviousJobCompletetionDate() {
        Date previousJobCompleteDate = null;
        try {
            Integer jobInstanceCount = jobExplorer.getJobInstanceCount("myjob");
            List<JobInstance> jobInstances = jobExplorer.getJobInstances("myjob", 0, jobInstanceCount);
            List<JobExecution> jobExecutions = jobInstances.stream().map(jobExplorer::getJobExecutions)
                    .flatMap(List<JobExecution>::stream)
                    .filter(param -> param.getExitStatus().equals(ExitStatus.COMPLETED)).collect(Collectors.toList());
            if (CollectionUtils.isNotEmpty(jobExecutions)) {
                Optional<JobExecution> jobExecutionOptional = jobExecutions.stream().sorted((JobExecution execution1, JobExecution execution2) -> execution2.getStartTime()
                        .compareTo(execution1.getStartTime())).findFirst();
                if (jobExecutionOptional.isPresent()) {
                    previousJobCompleteDate = jobExecutionOptional.get().getStartTime();
                }
            }
        } catch (NoSuchJobException exception) {
            log.error("Exception occurred {}", exception.getMessage());
        }
        return previousJobCompleteDate;
    }