[英]Primary Key Violation in spring batch's BATCH_JOB_INSTANCE TABLE while running job parallel
[英]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.