繁体   English   中英

Spring 批量检查运行Job Instance

[英]Spring batch check running Job Instance

我试图检查是否有任何正在运行的作业实例。

Set<JobExecution> jobExecutions = jobExplorer.findRunningJobExecutions(job.getName());

但是当我们有未正确完成的旧执行时,上面的代码不起作用。 在这种情况下,jobExecutions 的大小大于 1。

我查看了 Spring 批处理代码以查看此方法正在获取哪些执行 & 下面是我在源代码中找到的查询。

private static final String GET_RUNNING_EXECUTIONS = "SELECT E.JOB_EXECUTION_ID, E.START_TIME, E.END_TIME, E.STATUS, E.EXIT_CODE, E.EXIT_MESSAGE, E.CREATE_TIME, E.LAST_UPDATED, E.VERSION, "
            + "E.JOB_INSTANCE_ID, E.JOB_CONFIGURATION_LOCATION from %PREFIX%JOB_EXECUTION E, %PREFIX%JOB_INSTANCE I where E.JOB_INSTANCE_ID=I.JOB_INSTANCE_ID and I.JOB_NAME=? and E.END_TIME is NULL order by E.JOB_EXECUTION_ID desc";

因此,正如您在上面的查询中看到的,只有一个条件 - END_TIME is NULL 因此,执行完成的时间并不重要 - 它会为您提供未填充 END_TIME 的所有执行。

您可以简单地执行 Java 根据您的业务需要过滤所需的执行,例如,

Set<JobExecution> runningJobExecutions = jobExecutions.stream().filter(jobExecution->ExitStatus.COMPLETED.equals(jobExecution.getExitStatus())).collect(Collectors.toSet());

您可以根据需要修改filter方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM